Issue #1661 - yajsw will now log to both the console and log file indefinitely

- yajsw can now be built from source on-demand
- the console debug parameter set by start.sh will now be passed to the jvm

Change-Id: I6146cbcb29887b462d9bda53bd3803b5775031d0

Former-commit-id: 96edb01711d6c0f33cff0bfb03bb8c681884c1b3
This commit is contained in:
Bryan Kowal 2013-03-21 13:58:36 -05:00
parent 3239c176fa
commit a6cd17feeb
634 changed files with 128722 additions and 2 deletions

View file

@ -94,7 +94,7 @@ export AMQP_SPEC=$awips_home/python/share/amqp/amqp.0-10.xml
#read and interpret the command line arguments #read and interpret the command line arguments
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
CONSOLE_FLAG=on CONSOLE_FLAG=on
CONSOLE_LOGLEVEL=INFO CONSOLE_LOGLEVEL=DEBUG
DEBUG_FLAG=off DEBUG_FLAG=off
PROFILE_FLAG=off PROFILE_FLAG=off
HIGH_MEM_FLAG=off HIGH_MEM_FLAG=off

View file

@ -181,7 +181,7 @@ wrapper.trigger.action=RESTART
wrapper.console.format=M wrapper.console.format=M
# Log Level for console output. (See docs for log levels) # Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=DEBUG wrapper.console.loglevel=${CONSOLE_LOGLEVEL}
# Log file to use for wrapper output logging. # Log file to use for wrapper output logging.
wrapper.logfile=${EDEX_HOME}/logs/edex-${EDEX_RUN_MODE}-YYYYMMDD.log wrapper.logfile=${EDEX_HOME}/logs/edex-${EDEX_RUN_MODE}-YYYYMMDD.log

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/ahessian"/>
<classpathentry kind="src" path="src/app/java"/>
<classpathentry kind="src" path="src/build/java"/>
<classpathentry kind="src" path="src/hessian"/>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/srvmgr/java"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry kind="src" path="src/ws/java"/>
<classpathentry kind="lib" path="build/gradle/gradle/wrapper/gradle-wrapper.jar"/>
<classpathentry kind="lib" path="lib/core/commons/commons-cli-2-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="lib/core/commons/commons-collections-3.2.jar"/>
<classpathentry kind="lib" path="lib/core/commons/commons-configuration-1.8.jar"/>
<classpathentry kind="lib" path="lib/core/commons/commons-io-1.3.1.jar"/>
<classpathentry kind="lib" path="lib/core/commons/commons-lang-2.4.jar"/>
<classpathentry kind="lib" path="lib/core/commons/commons-logging-1.1.jar"/>
<classpathentry kind="lib" path="lib/core/commons/commons-vfs2-2.0.jar"/>
<classpathentry kind="lib" path="lib/core/groovy/groovy-all-1.8.6.jar"/>
<classpathentry kind="lib" path="lib/core/jna/jna-3.4.1.jar"/>
<classpathentry kind="lib" path="lib/core/jna/platform-3.4.1.jar"/>
<classpathentry kind="lib" path="lib/core/netty/netty-3.5.1.Final.jar"/>
<classpathentry kind="lib" path="lib/core/regex/jrexx-1.1.1.jar"/>
<classpathentry kind="lib" path="lib/core/yajsw/ahessian.jar"/>
<classpathentry kind="lib" path="lib/extended/abeille/formsrt.jar"/>
<classpathentry kind="lib" path="lib/extended/commons/commons-codec-1.3.jar"/>
<classpathentry kind="lib" path="lib/extended/commons/commons-httpclient-3.0.1.jar"/>
<classpathentry kind="lib" path="lib/extended/commons/commons-net-1.4.1.jar"/>
<classpathentry kind="lib" path="lib/extended/glazedlists/commons-beanutils-1.8.2.jar"/>
<classpathentry kind="lib" path="lib/extended/glazedlists/glazedlists-1.8.0_java15.jar"/>
<classpathentry kind="lib" path="lib/extended/jgoodies/forms-1.2.0.jar"/>
<classpathentry kind="lib" path="lib/extended/quartz/quartz-1.8.0.jar"/>
<classpathentry kind="lib" path="lib/extended/velocity/velocity-1.6.3.jar"/>
<classpathentry kind="lib" path="lib/extended/vfs-webdav/jackrabbit-webdav-1.5.6.jar"/>
<classpathentry kind="lib" path="lib/extended/vfs-webdav/slf4j-api-1.5.0.jar"/>
<classpathentry kind="lib" path="lib/extended/vfs-webdav/slf4j-jdk14-1.5.0.jar"/>
<classpathentry kind="lib" path="lib/extended/vfs-webdav/xercesImpl.jar"/>
<classpathentry kind="lib" path="lib/extended/yajsw/hessian4.jar"/>
<classpathentry kind="lib" path="lib/extended/yajsw/srvmgr.jar"/>
<classpathentry kind="lib" path="lib/groovy/joda/joda-time-1.6.jar"/>
<classpathentry kind="lib" path="lib/groovy/mail/activation.jar"/>
<classpathentry kind="lib" path="lib/groovy/mail/mail.jar"/>
<classpathentry kind="lib" path="lib/groovy/snmp/SNMP4J.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>yajsw</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,36 @@
<project name="Build YAJSW" default="main" basedir=".">
<!-- The location that the built jar files should be copied to. -->
<property name="destination.directory"
value="/tmp" />
<property name="gradle.directory"
value="${basedir}/build/gradle" />
<property name="gradle.build.script"
value="${gradle.directory}/gradlew.sh" />
<target name="main" depends="clean">
<echo message="Building 'Yet Another Java Service Wrapper' ..." />
<exec executable="/bin/bash" dir="${gradle.directory}">
<arg value="${gradle.build.script}" />
</exec>
<echo message="" />
<echo message="Copying Built Jars To Destination ... ${destination.directory}" />
<copy file="${gradle.directory}/wrapper/build/libs/wrapper.jar"
todir="${destination.directory}" />
<copy file="${gradle.directory}/wrapper-app/build/libs/wrapperApp.jar"
todir="${destination.directory}" />
<echo message="" />
<antcall target="clean" />
</target>
<target name="clean">
<exec executable="/bin/bash" dir="${gradle.directory}">
<arg value="${gradle.build.script}" />
<arg value="clean" />
</exec>
</target>
</project>

View file

@ -0,0 +1,50 @@
Manifest-Version: 1.0
Class-Path-Wrapper-Core:
./wrapperApp.jar
./lib/core/yajsw/ahessian.jar
./lib/core/netty/netty-3.5.1.Final.jar
./lib/core/jna/jna-3.4.1.jar
./lib/core/jna/platform-3.4.1.jar
./lib/core/commons/commons-configuration-1.8.jar
./lib/core/commons/commons-vfs2-2.0.jar
./lib/core/groovy/groovy-all-1.8.6.jar
./lib/core/commons/commons-collections-3.2.jar
./lib/core/commons/commons-io-1.3.1.jar
./lib/core/commons/commons-lang-2.4.jar
./lib/core/commons/commons-logging-1.1.jar
./lib/core/commons/commons-cli-2-SNAPSHOT.jar
./lib/core/regex/jrexx-1.1.1.jar
Class-Path-Wrapper-Extended:
./lib/extended/commons/commons-httpclient-3.0.1.jar
./lib/extended/commons/commons-codec-1.3.jar
./lib/extended/yajsw/hessian4.jar
./lib/extended/hessian/hessian-4.0.2.jar
./lib/extended/hessian/servlet-api.jar
./lib/extended/glazedlists/glazedlists-1.8.0_java15.jar
./lib/extended/glazedlists/commons-beanutils-1.8.2.jar
./lib/extended/quartz/quartz-1.8.0.jar
./lib/extended/quartz/jta-spec1_0_1.jar
./lib/extended/velocity/velocity-1.6.3.jar
./lib/extended/jgoodies/forms-1.2.0.jar
./lib/extended/vfs-webdav/jackrabbit-webdav-1.5.6.jar
./lib/extended/vfs-webdav/xercesImpl.jar
./lib/extended/vfs-webdav/slf4j-jdk14-1.5.0.jar
./lib/extended/vfs-webdav/slf4j-api-1.5.0.jar
./lib/extended/srvmgr-client/commons-beanutils-1.8.2.jar
./lib/extended/srvmgr-client/glazedlists-1.8.0_java15.jar
./lib/extended/abeille/formsrt.jar
Class-Path-App:
./wrapper.jar
./lib/core/netty/netty-3.5.1.Final.jar
./lib/core/commons/commons-configuration-1.8.jar
./lib/core/commons/commons-vfs2-2.0.jar
./lib/core/groovy/groovy-all-1.8.6.jar
./lib/core/commons/commons-collections-3.2.jar
./lib/core/commons/commons-io-1.3.1.jar
./lib/core/commons/commons-lang-2.4.jar
./lib/core/commons/commons-logging-1.1.jar
Main-Class: org.rzo.yajsw.boot.WrapperExeBooter

View file

@ -0,0 +1,15 @@
The manifest in this folder should be added to wrapper.jar and wrapperApp.jar
It assumes that the relative folder structure of the jar files is not changed.
If you would like to change the folder structure you should adapt the manifest accordingly.
A build script is included in the subfolder gradle.
Building SNAPSHOT jars is not included in this build. Please use the following subversion
revisions to build them:
commons-vfs-2.0-SNAPSHOT.jar 784083
commons-cli-2-SNAPSHOT.jar 647073
commons-configuration-1.7-SNAPSHOT.jar 784085
NOTE: the above projects have not had new releases for years, but have been commiting new features which are used here.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,4 @@
These files have been created with abeille gui designer
https://abeille.dev.java.net/
They are used to generate the according gui classes.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,771 @@
<?xml version="1.0" encoding="UTF-8"?>
<object classname="com.jeta.forms.store.memento.FormPackage">
<at name="fileversion">
<object classname="com.jeta.forms.store.memento.FormsVersion2">
<at name="major">2</at>
<at name="minor">0</at>
<at name="sub">0</at>
</object>
</at>
<at name="form">
<object classname="com.jeta.forms.store.memento.FormMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">1</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
</super>
<at name="id">Z:\dev\forms\abeille-2.1.0_M2\examples\forms\srvmgr_install_dialog.xml</at>
<at name="path">forms\srvmgr_install_dialog.xml</at>
<at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:111PX:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:12DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
<at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:143PX:NONE,FILL:249PX:NONE,FILL:DEFAULT:NONE</at>
<at name="components">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">7</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">YAJSW Configuration</at>
<at name="height">14</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">11</at>
</object>
</at>
<at name="name"/>
<at name="width">118</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.FormMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">9</at>
<at name="colspan">4</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
</super>
<at name="id">embedded.13305839</at>
<at name="rowspecs">CENTER:DEFAULT:NONE</at>
<at name="colspecs">FILL:308PX:NONE,FILL:89PX:NONE,FILL:22PX:NONE,FILL:87PX:NONE</at>
<at name="components">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JButton</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JButton</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">CLOSE</at>
<at name="height">22</at>
<at name="width">83</at>
<at name="name">CANCEL_BUTTON</at>
<at name="actionCommand">Cancel</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JButton</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JButton</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">INSTALL</at>
<at name="height">22</at>
<at name="width">85</at>
<at name="name">OK_BUTTON</at>
<at name="actionCommand">OK</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
</object>
</at>
<at name="properties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.gui.form.GridView</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="name"/>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="scollBars">
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
<at name="name">scollBars</at>
<at name="verticalpolicy">21</at>
<at name="horizontalpolicy">31</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList"/>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="cellpainters">
<object classname="com.jeta.forms.store.support.Matrix">
<at name="rows">
<object classname="[Ljava.lang.Object;" size="1">
<at name="item" index="0">
<object classname="[Ljava.lang.Object;" size="4"/>
</at>
</object>
</at>
</object>
</at>
<at name="rowgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
<at name="colgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">2</at>
<at name="colspan">4</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="horizontalAlignment">0</at>
<at name="text">Install/Reinstall YAJSW Service</at>
<at name="height">15</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">12</at>
</object>
</at>
<at name="name"/>
<at name="width">516</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">7</at>
<at name="colspan">2</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JComboBox</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JComboBox</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="height">20</at>
<at name="requestFocusEnabled">false</at>
<at name="items">
<object classname="com.jeta.forms.store.properties.ItemsProperty">
<at name="name">items</at>
</object>
</at>
<at name="componentCount">3</at>
<at name="width">388</at>
<at name="name">CONFIGURATION</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
<at name="editable">true</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">10</at>
<at name="colspan">4</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="height">12</at>
<at name="width">516</at>
<at name="name">MESSAGE</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">4</at>
<at name="colspan">1</at>
<at name="rowspan">2</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JList</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JList</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="scrollableTracksViewportWidth">true</at>
<at name="height">123</at>
<at name="items">
<object classname="com.jeta.forms.store.properties.ItemsProperty">
<at name="name">items</at>
</object>
</at>
<at name="width">137</at>
<at name="name">HOSTS_LIST</at>
<at name="scollBars">
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
<at name="name">scollBars</at>
<at name="verticalpolicy">20</at>
<at name="horizontalpolicy">30</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
<at name="scrollableTracksViewportHeight">true</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">4</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">Hosts</at>
<at name="height">14</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">11</at>
</object>
</at>
<at name="name"/>
<at name="width">118</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
</object>
</at>
<at name="properties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.gui.form.GridView</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="name"/>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="scollBars">
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
<at name="name">scollBars</at>
<at name="verticalpolicy">21</at>
<at name="horizontalpolicy">31</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList"/>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="cellpainters">
<object classname="com.jeta.forms.store.support.Matrix">
<at name="rows">
<object classname="[Ljava.lang.Object;" size="11">
<at name="item" index="0">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="1">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="2">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="3">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="4">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="5">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="6">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="7">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="8">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="9">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="10">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
</object>
</at>
</object>
</at>
<at name="rowgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
<at name="colgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
</object>
</at>
</object>

View file

@ -0,0 +1,725 @@
<?xml version="1.0" encoding="UTF-8"?>
<object classname="com.jeta.forms.store.memento.FormPackage">
<at name="fileversion">
<object classname="com.jeta.forms.store.memento.FormsVersion2">
<at name="major">2</at>
<at name="minor">0</at>
<at name="sub">0</at>
</object>
</at>
<at name="form">
<object classname="com.jeta.forms.store.memento.FormMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">1</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
</super>
<at name="id">Z:\dev\forms\abeille-2.1.0_M2\examples\forms\newHostDialog.xml</at>
<at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:12DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
<at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:143PX:NONE,FILL:120PX:NONE,FILL:DEFAULT:NONE</at>
<at name="components">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">6</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">Port</at>
<at name="height">14</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">11</at>
</object>
</at>
<at name="width">26</at>
<at name="name"></at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">2</at>
<at name="colspan">4</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="horizontalAlignment">0</at>
<at name="text">Add Host</at>
<at name="height">15</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">12</at>
</object>
</at>
<at name="width">295</at>
<at name="name"></at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">4</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">Host</at>
<at name="height">14</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">11</at>
</object>
</at>
<at name="width">26</at>
<at name="name"></at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">4</at>
<at name="colspan">2</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JTextField</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JTextField</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="height">20</at>
<at name="width">259</at>
<at name="name">HOST</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">9</at>
<at name="colspan">4</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="height">12</at>
<at name="width">295</at>
<at name="name">MESSAGE</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">6</at>
<at name="colspan">2</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JTextField</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JTextField</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="height">20</at>
<at name="width">259</at>
<at name="name">PORT</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.FormMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">8</at>
<at name="colspan">4</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
</super>
<at name="id">embedded.7021349</at>
<at name="rowspecs">CENTER:DEFAULT:NONE</at>
<at name="colspecs">FILL:93PX:NONE,FILL:89PX:NONE,FILL:22PX:NONE,FILL:87PX:NONE</at>
<at name="components">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JButton</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JButton</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">CANCEL</at>
<at name="height">22</at>
<at name="width">83</at>
<at name="name">CANCEL_BUTTON</at>
<at name="actionCommand">Cancel</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JButton</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JButton</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">ADD HOST</at>
<at name="height">22</at>
<at name="width">85</at>
<at name="name">OK_BUTTON</at>
<at name="actionCommand">OK</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
</object>
</at>
<at name="properties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.gui.form.GridView</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="name"></at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="scollBars">
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
<at name="name">scollBars</at>
<at name="verticalpolicy">21</at>
<at name="horizontalpolicy">31</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList"/>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="cellpainters">
<object classname="com.jeta.forms.store.support.Matrix">
<at name="rows">
<object classname="[Ljava.lang.Object;" size="1">
<at name="item" index="0">
<object classname="[Ljava.lang.Object;" size="4"/>
</at>
</object>
</at>
</object>
</at>
<at name="rowgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
<at name="colgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
</object>
</at>
</item>
</object>
</at>
<at name="properties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.gui.form.GridView</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="name"/>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="scollBars">
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
<at name="name">scollBars</at>
<at name="verticalpolicy">21</at>
<at name="horizontalpolicy">31</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList"/>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="cellpainters">
<object classname="com.jeta.forms.store.support.Matrix">
<at name="rows">
<object classname="[Ljava.lang.Object;" size="10">
<at name="item" index="0">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="1">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="2">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="3">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="4">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="5">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="6">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="7">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="8">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="9">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
</object>
</at>
</object>
</at>
<at name="rowgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
<at name="colgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
</object>
</at>
</object>

View file

@ -0,0 +1,734 @@
<?xml version="1.0" encoding="UTF-8"?>
<object classname="com.jeta.forms.store.memento.FormPackage">
<at name="fileversion">
<object classname="com.jeta.forms.store.memento.FormsVersion2">
<at name="major">2</at>
<at name="minor">0</at>
<at name="sub">0</at>
</object>
</at>
<at name="form">
<object classname="com.jeta.forms.store.memento.FormMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">1</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
</super>
<at name="id">Z:\dev\forms\abeille-2.1.0_M2\examples\forms\srvmgr_reload_console.xml</at>
<at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:12DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
<at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:143PX:NONE,FILL:249PX:NONE,FILL:DEFAULT:NONE</at>
<at name="components">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">6</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">YAJSW Configuration</at>
<at name="height">14</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">11</at>
</object>
</at>
<at name="name"/>
<at name="width">118</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.FormMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">8</at>
<at name="colspan">4</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
</super>
<at name="id">embedded.31326333</at>
<at name="rowspecs">CENTER:DEFAULT:NONE</at>
<at name="colspecs">FILL:308PX:NONE,FILL:89PX:NONE,FILL:22PX:NONE,FILL:87PX:NONE</at>
<at name="components">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JButton</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JButton</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">CLOSE</at>
<at name="height">22</at>
<at name="width">83</at>
<at name="name">CANCEL_BUTTON</at>
<at name="actionCommand">Cancel</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JButton</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JButton</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">INSTALL</at>
<at name="height">22</at>
<at name="width">85</at>
<at name="name">OK_BUTTON</at>
<at name="actionCommand">OK</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
</object>
</at>
<at name="properties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.gui.form.GridView</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="name"/>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="scollBars">
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
<at name="name">scollBars</at>
<at name="verticalpolicy">21</at>
<at name="horizontalpolicy">31</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList"/>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="cellpainters">
<object classname="com.jeta.forms.store.support.Matrix">
<at name="rows">
<object classname="[Ljava.lang.Object;" size="1">
<at name="item" index="0">
<object classname="[Ljava.lang.Object;" size="4"/>
</at>
</object>
</at>
</object>
</at>
<at name="rowgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
<at name="colgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">2</at>
<at name="colspan">4</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="horizontalAlignment">0</at>
<at name="text">Reload YAJSW Console Application</at>
<at name="height">15</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">12</at>
</object>
</at>
<at name="name"/>
<at name="width">516</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">6</at>
<at name="colspan">2</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JComboBox</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JComboBox</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="height">20</at>
<at name="requestFocusEnabled">false</at>
<at name="items">
<object classname="com.jeta.forms.store.properties.ItemsProperty">
<at name="name">items</at>
</object>
</at>
<at name="componentCount">3</at>
<at name="width">388</at>
<at name="name">CONFIGURATION</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
<at name="editable">true</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">4</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">Console</at>
<at name="height">14</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">11</at>
</object>
</at>
<at name="name"/>
<at name="width">118</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">4</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JTextField</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JTextField</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="enabled">false</at>
<at name="height">20</at>
<at name="width">139</at>
<at name="name">SERVICE</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">9</at>
<at name="colspan">4</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="height">12</at>
<at name="width">516</at>
<at name="name">MESSAGE</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
</object>
</at>
<at name="properties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.gui.form.GridView</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="name"/>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="scollBars">
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
<at name="name">scollBars</at>
<at name="verticalpolicy">21</at>
<at name="horizontalpolicy">31</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList"/>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="cellpainters">
<object classname="com.jeta.forms.store.support.Matrix">
<at name="rows">
<object classname="[Ljava.lang.Object;" size="10">
<at name="item" index="0">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="1">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="2">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="3">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="4">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="5">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="6">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="7">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="8">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
<at name="item" index="9">
<object classname="[Ljava.lang.Object;" size="6"/>
</at>
</object>
</at>
</object>
</at>
<at name="rowgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
<at name="colgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
</object>
</at>
</object>

View file

@ -0,0 +1,508 @@
<?xml version="1.0" encoding="UTF-8"?>
<object classname="com.jeta.forms.store.memento.FormPackage">
<at name="fileversion">
<object classname="com.jeta.forms.store.memento.FormsVersion2">
<at name="major">2</at>
<at name="minor">0</at>
<at name="sub">0</at>
</object>
</at>
<at name="form">
<object classname="com.jeta.forms.store.memento.FormMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">1</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
</super>
<at name="id">6.Do, Dez 3, 2009 - 10:23:25</at>
<at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
<at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:8DLU:NONE</at>
<at name="components">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">4</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">The following services will be removed. Note: only YAJSW can be removed</at>
<at name="height">14</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">11</at>
</object>
</at>
<at name="width">415</at>
<at name="name"></at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">6</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">Host/service name, Host/Service name</at>
<at name="height">14</at>
<at name="width">415</at>
<at name="name">SERVICES</at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.FormMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">8</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
</super>
<at name="id">embedded.8.Do, Dez 3, 2009 - 10:26:04</at>
<at name="rowspecs">CENTER:DEFAULT:NONE</at>
<at name="colspecs">FILL:280PX:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE</at>
<at name="components">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">4</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JButton</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JButton</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">Cancel</at>
<at name="height">22</at>
<at name="width">64</at>
<at name="name">CANCEL_BUTTON</at>
<at name="actionCommand">Cancel</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">1</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">javax.swing.JButton</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">javax.swing.JButton</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="text">OK</at>
<at name="height">22</at>
<at name="width">46</at>
<at name="name">OK_BUTTON</at>
<at name="actionCommand">OK</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
</object>
</at>
<at name="properties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.gui.form.GridView</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="name"></at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="scollBars">
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
<at name="name">scollBars</at>
<at name="verticalpolicy">21</at>
<at name="horizontalpolicy">31</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList"/>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="cellpainters">
<object classname="com.jeta.forms.store.support.Matrix">
<at name="rows">
<object classname="[Ljava.lang.Object;" size="1">
<at name="item" index="0">
<object classname="[Ljava.lang.Object;" size="4"/>
</at>
</object>
</at>
</object>
</at>
<at name="rowgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
<at name="colgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
</object>
</at>
</item>
<item >
<at name="value">
<object classname="com.jeta.forms.store.memento.BeanMemento">
<super classname="com.jeta.forms.store.memento.ComponentMemento">
<at name="cellconstraints">
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
<at name="column">2</at>
<at name="row">2</at>
<at name="colspan">1</at>
<at name="rowspan">1</at>
<at name="halign">default</at>
<at name="valign">default</at>
<at name="insets" object="insets">0,0,0,0</at>
</object>
</at>
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
</super>
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
<at name="beanproperties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.components.label.JETALabel</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="horizontalAlignment">0</at>
<at name="text">Uninstall Services</at>
<at name="height">15</at>
<at name="font">
<object classname="com.jeta.forms.store.properties.FontProperty">
<at name="family">Tahoma</at>
<at name="style">1</at>
<at name="size">12</at>
</object>
</at>
<at name="width">415</at>
<at name="name"></at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList">
<item >
<at name="value">
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
</object>
</at>
</item>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
</item>
</object>
</at>
<at name="properties">
<object classname="com.jeta.forms.store.memento.PropertiesMemento">
<at name="classname">com.jeta.forms.gui.form.GridView</at>
<at name="properties">
<object classname="com.jeta.forms.store.support.PropertyMap">
<at name="name"></at>
<at name="fill">
<object classname="com.jeta.forms.store.properties.effects.PaintProperty">
<at name="name">fill</at>
</object>
</at>
<at name="scollBars">
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
<at name="name">scollBars</at>
<at name="verticalpolicy">21</at>
<at name="horizontalpolicy">31</at>
</object>
</at>
<at name="border">
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
<super classname="com.jeta.forms.store.properties.BorderProperty">
<at name="name">border</at>
</super>
<at name="borders">
<object classname="java.util.LinkedList"/>
</at>
</object>
</at>
</object>
</at>
</object>
</at>
<at name="cellpainters">
<object classname="com.jeta.forms.store.support.Matrix">
<at name="rows">
<object classname="[Ljava.lang.Object;" size="9">
<at name="item" index="0">
<object classname="[Ljava.lang.Object;" size="3"/>
</at>
<at name="item" index="1">
<object classname="[Ljava.lang.Object;" size="3"/>
</at>
<at name="item" index="2">
<object classname="[Ljava.lang.Object;" size="3"/>
</at>
<at name="item" index="3">
<object classname="[Ljava.lang.Object;" size="3"/>
</at>
<at name="item" index="4">
<object classname="[Ljava.lang.Object;" size="3"/>
</at>
<at name="item" index="5">
<object classname="[Ljava.lang.Object;" size="3"/>
</at>
<at name="item" index="6">
<object classname="[Ljava.lang.Object;" size="3"/>
</at>
<at name="item" index="7">
<object classname="[Ljava.lang.Object;" size="3"/>
</at>
<at name="item" index="8">
<object classname="[Ljava.lang.Object;" size="3"/>
</at>
</object>
</at>
</object>
</at>
<at name="rowgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
<at name="colgroups">
<object classname="com.jeta.forms.store.memento.FormGroupSet">
<at name="groups">
<object classname="java.util.HashMap"/>
</at>
</object>
</at>
</object>
</at>
</object>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1 @@
#Tue Feb 19 12:06:40 CST 2013

View file

@ -0,0 +1,18 @@
projectHome = '../../..'
sourceSets.main.java.srcDirs = ["$projectHome/src/ahessian"]
// this project uses the ahessian sub-project
dependencies {
compile project(':hessian4')
compile group: 'netty', name: 'netty', version: "$netty_version"
}
println '---------------------------'
println 'dependency jars:'
println '---------------------------'
configurations.compile.each { File file -> println file.absolutePath }
println '---------------------------'
jar.baseName = 'ahessian'

View file

@ -0,0 +1,69 @@
task createWrapper(type: Wrapper) {
gradleVersion = '0.9.2'
}
projectHome = '../..'
defaultTasks 'clean', 'build'
// common settings for all sub-projects
subprojects {
apply plugin: 'java'
defaultTasks 'clean', 'build'
coreLibsDir = "$projectHome/lib/core"
extendedLibsDir = "$projectHome/lib/extended"
// dependency versions
commons_cli_version = '2-SNAPSHOT'
commons_collections_version = '3.2'
commons_configuration_version = '1.8'
commons_io_version = '1.3.1'
commons_lang_version = '2.4'
commons_logging_version = '1.1'
commons_vfs2_version = '2.0'
groovy_all_version = '1.8.6'
jna_version = '3.4.1'
platform_version = '3.4.1'
netty_version = '3.5.1.Final'
jrexx_version = '1.1.1'
quartz_version = '1.8.0'
formsrt_version = ''
forms_version = '1.2.0'
velocity_version = '1.6.3'
glazedlists_version = '1.8.0_java15'
commons_beanutils_version = '1.8.2'
// for simplicity and to avoid dependency issues which arise due to the usage of SNAPSHOT libs
// we use libs from local disk instead of public repository
repositories {
flatDir name: 'localRepository',
dirs: [
"$coreLibsDir/commons",
"$coreLibsDir/groovy",
"$coreLibsDir/jna",
"$coreLibsDir/netty",
"$coreLibsDir/regex",
"$coreLibsDir/yajsw",
"$extendedLibsDir/quartz",
"$extendedLibsDir/abeille",
"$extendedLibsDir/jgoodies",
"$extendedLibsDir/glazedlists",
"$extendedLibsDir/velocity"
]
}
sourceCompatibility = 1.5
version = ''
}

Binary file not shown.

View file

@ -0,0 +1,6 @@
#Thu Feb 10 17:06:13 CET 2011
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=gradle-0.9.2-bin.zip

View file

@ -0,0 +1,84 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem ##
@rem Gradle startup script for Windows ##
@rem ##
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set JAVA_OPTS=%JAVA_OPTS% -Dhttp.proxyHost=srvproxy.init-ka.lan -Dhttp.proxyPort=8080
@rem Uncomment those lines to set JVM options. GRADLE_OPTS and JAVA_OPTS can be used together.
@rem set GRADLE_OPTS=%GRADLE_OPTS% -Xmx512m
@rem set JAVA_OPTS=%JAVA_OPTS% -Xmx512m
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.\
@rem Find java.exe
set JAVA_EXE=java.exe
if not defined JAVA_HOME goto init
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo.
goto end
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set STARTER_MAIN_CLASS=org.gradle.wrapper.GradleWrapperMain
set CLASSPATH=%DIRNAME%\gradle\wrapper\gradle-wrapper.jar
set WRAPPER_PROPERTIES=%DIRNAME%\gradle\wrapper\gradle-wrapper.properties
set GRADLE_OPTS=%JAVA_OPTS% %GRADLE_OPTS% -Dorg.gradle.wrapper.properties="%WRAPPER_PROPERTIES%"
@rem Execute Gradle
"%JAVA_EXE%" %GRADLE_OPTS% -classpath "%CLASSPATH%" %STARTER_MAIN_CLASS% %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if not "%OS%"=="Windows_NT" echo 1 > nul | choice /n /c:1
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit "%ERRORLEVEL%"
exit /b "%ERRORLEVEL%"
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View file

@ -0,0 +1,169 @@
#!/bin/bash
##############################################################################
## ##
## Gradle wrapper script for UN*X ##
## ##
##############################################################################
# Uncomment those lines to set JVM options. GRADLE_OPTS and JAVA_OPTS can be used together.
# GRADLE_OPTS="$GRADLE_OPTS -Xmx512m"
# JAVA_OPTS="$JAVA_OPTS -Xmx512m"
JAVA_OPTS="$JAVA_OPTS -Dhttp.pxoyPort=80 -Dhttp.proxyHost=http://proxy.ext.ray.com"
GRADLE_APP_NAME=Gradle
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set JAVA_HOME if it's not already set.
if [ -z "$JAVA_HOME" ] ; then
if $darwin ; then
[ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home"
[ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home"
else
javaExecutable="`which javac`"
[ -z "$javaExecutable" -o "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ] && die "JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME."
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
[ `expr "$readLink" : '\([^ ]*\)'` = "no" ] && die "JAVA_HOME not set and readlink not available, please set JAVA_HOME."
javaExecutable="`readlink -f \"$javaExecutable\"`"
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
export JAVA_HOME="$javaHome"
fi
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"`
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
STARTER_MAIN_CLASS=org.gradle.wrapper.GradleWrapperMain
CLASSPATH=`dirname "$0"`/gradle/wrapper/gradle-wrapper.jar
WRAPPER_PROPERTIES=`dirname "$0"`/gradle/wrapper/gradle-wrapper.properties
# Determine the Java command to use to start the JVM.
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="java"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
if [ -z "$JAVA_HOME" ] ; then
warn "JAVA_HOME environment variable is not set"
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add GRADLE_APP_NAME to the JAVA_OPTS as -Xdock:name
if $darwin; then
JAVA_OPTS="$JAVA_OPTS -Xdock:name=$GRADLE_APP_NAME"
# we may also want to set -Xdock:image
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
JAVA_HOME=`cygpath --path --mixed "$JAVA_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
GRADLE_APP_BASE_NAME=`basename "$0"`
exec "$JAVACMD" $JAVA_OPTS $GRADLE_OPTS \
-classpath "$CLASSPATH" \
-Dorg.gradle.appname="$GRADLE_APP_BASE_NAME" \
-Dorg.gradle.wrapper.properties="$WRAPPER_PROPERTIES" \
$STARTER_MAIN_CLASS \
"$@"

View file

@ -0,0 +1,16 @@
projectHome = '../../..'
sourceSets.main.java.srcDirs = ["$projectHome/src/hessian"]
dependencies {
compile group: 'netty', name: 'netty', version: "$netty_version"
}
println '---------------------------'
println 'dependency jars:'
println '---------------------------'
configurations.compile.each { File file -> println file.absolutePath }
println '---------------------------'
jar.baseName = 'hessian4'

View file

@ -0,0 +1,25 @@
YAJSW uses gradle as build tool:
http://www.gradle.org/
The build is a multi project script. Gradle requires per project a build folder.
The following build folders are used:
wrapper -> wrapper.jar main yajsw jar
wrapper-app -> wrapperApp.jar wraps the application
ahessian -> ahessian.jar netty/hessian based asynch communication between wrapper and system tray icon. hessian packages renamed to avoid conflict with existing hessian libs
srvmgr -> srvmgr.jar experimental - monitoring of multiple servers
To execute a build:
- <yajsw>/build/gradle
- Navigte with a console to <yajsw>/build/gradle
- If you are behind a http proxy edit gradlew.bat/gardlew.sh and set the proxy in the java options
- execute gradlew
This will download gradle and execute the build script.
The produced jar files are found in the folders:
<yajsw>/build/gradle/<sub-project>/build/libs
Eclipse project files can be generated by adding the according gradle tasks to the gradle build scripts.

View file

@ -0,0 +1,2 @@
// defines a list of subprojects
include "wrapper", "wrapper-app", "ahessian", "hessian4", "srvmgr"

View file

@ -0,0 +1,32 @@
projectHome = '../../..'
sourceSets.main.java.srcDirs = ["$projectHome/src/srvmgr/java"]
dependencies {
compile project(':wrapper')
compile project(':ahessian')
}
dependencies {
compile group: 'netty', name: 'netty', version: "$netty_version"
compile group: 'glazedlists', name: 'glazedlists', version: "$glazedlists_version"
compile group: 'commons-beanutils', name: 'commons-beanutils', version: "$commons_beanutils_version"
compile group: 'commons-configuration', name: 'commons-configuration', version: "$commons_configuration_version"
compile group: 'groovy-all', name: 'groovy-all', version: "$groovy_all_version"
compile group: 'jna', name: 'jna', version: "$jna_version"
compile group: 'platform', name: 'platform', version: "$platform_version"
compile group: 'abeille', name: 'formsrt', version: "$formsrt_version"
compile group: 'forms', name: 'forms', version: "$forms_version"
}
//println '---------------------------'
//println 'dependency jars:'
//println '---------------------------'
//configurations.compile.each { File file -> println file.absolutePath }
//println '---------------------------'
// name of jar
jar.baseName = 'srvmgr'
// use default manifest

View file

@ -0,0 +1,31 @@
projectHome = '../../..'
sourceSets.main.java.srcDirs = ["$projectHome/src/app"]
dependencies {
compile project(':wrapper')
}
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: "$commons_collections_version"
compile group: 'commons-configuration', name: 'commons-configuration', version: "$commons_configuration_version"
compile group: 'commons-io', name: 'commons-io', version: "$commons_io_version"
compile group: 'commons-lang', name: 'commons-lang', version: "$commons_lang_version"
compile group: 'commons-logging', name: 'commons-logging', version: "$commons_logging_version"
compile group: 'netty', name: 'netty', version: "$netty_version"
}
//println '---------------------------'
//println 'dependency jars:'
//println '---------------------------'
//configurations.compile.each { File file -> println file.absolutePath }
//println '---------------------------'
// name of jar file
jar.baseName = 'wrapperApp'
// TODO generate manifest
jar {
manifest {
from '../../MANIFEST.MF'
}
}

View file

@ -0,0 +1,54 @@
projectHome = '../../..'
// set the sources for this build
sourceSets.main.java.srcDirs = ["$projectHome/src/main/java", "$projectHome/src/app/java"]
sourceSets.main.resources.srcDirs = ["$projectHome/src/main/java"]
sourceSets.main.resources.includes = ['resources/*']
// this project uses the ahessian sub-project
dependencies {
compile project(':ahessian')
}
dependencies {
compile group: 'commons-cli', name: 'commons-cli', version: "$commons_cli_version"
compile group: 'commons-collections', name: 'commons-collections', version: "$commons_collections_version"
compile group: 'commons-configuration', name: 'commons-configuration', version: "$commons_configuration_version"
compile group: 'commons-io', name: 'commons-io', version: "$commons_io_version"
compile group: 'commons-lang', name: 'commons-lang', version: "$commons_lang_version"
compile group: 'commons-logging', name: 'commons-logging', version: "$commons_logging_version"
compile group: 'commons-vfs2', name: 'commons-vfs2', version: "$commons_vfs2_version"
compile group: 'groovy-all', name: 'groovy-all', version: "$groovy_all_version"
compile group: 'jna', name: 'jna', version: "$jna_version"
compile group: 'platform', name: 'platform', version: "$platform_version"
compile group: 'netty', name: 'netty', version: "$netty_version"
compile group: 'jrexx', name: 'jrexx', version: "$jrexx_version"
compile group: 'quartz', name: 'quartz', version: "$quartz_version"
compile group: 'abeille', name: 'formsrt', version: "$formsrt_version"
compile group: 'forms', name: 'forms', version: "$forms_version"
compile group: 'velocity', name: 'velocity', version: "$velocity_version"
}
//println '---------------------------'
//println 'dependency jars:'
//println '---------------------------'
//configurations.compile.each { File file -> println file.absolutePath }
//println '---------------------------'
// name of jar file
jar.baseName = 'wrapper'
// TODO generate manifest instead of editing
jar {
manifest {
from '../../MANIFEST.MF'
}
exclude 'org/rzo/yajsw/app/AbstractWrapperJVMMain*'
exclude 'org/rzo/yajsw/app/WrapperGroovyMain*'
exclude 'org/rzo/yajsw/app/WrapperJVMMain*'
exclude 'org/rzo/yajsw/app/WrapperMainServiceUnix*'
exclude 'org/rzo/yajsw/app/WrapperMainServiceWin*'
exclude 'org/rzo/yajsw/app/WrapperManager.class'
exclude 'org/rzo/yajsw/app/WrapperManagerClassLoader*'
exclude 'org/rzo/yajsw/app/WrapperManagerProxy*'
}

View file

@ -0,0 +1,4 @@
These are files used to sign wrapperWS.jar
It is taken from
http://weblogs.java.net/blog/kirillcool/archive/2005/05/signing_jars_fo.html

View file

@ -0,0 +1 @@
keytool -genkey -keystore jaxb.keys -alias https://jaxb-workshop.dev.java.net/ -validity 1491

Binary file not shown.

View file

@ -0,0 +1 @@
jarsigner -keystore jaxb.keys -storepass testyajsw ../wrapperWS.jar https://jaxb-workshop.dev.java.net/

View file

@ -0,0 +1,23 @@
This is the minimal set of libraries required by YAJSW
It includes the following core functionalities:
All platforms
* runConsole
* filter triggers
* regex filter triggers
* logging
* restart on exit code
* groovy scripting
* network start
Windows
* installService, uninstallService, startService, stopService
It does not include the following functions:
* installDaemon, uninstallDaemon, startDaemon, stopDaemon
* system tray icon
* timers
* services manager
* network start per webdav or http or ftp

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,25 @@
The following libraries provide extended functionalites to YAJSW:
Timers require:
* quartz
Posix Installation of daemons requires:
* velocity
System tray requires:
* abeille
* jgoodies
* yajsw
ServiceManager requires:
* abeille
* jgoodies
* glazed lists
* hessian
Network loading in general
* commons
Network loading per webdav
* vfs-webdav

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,11 @@
The following libraries are loaded when a groovy script is executed.
To add libraries required by groovy scripts create a folder here and add the jar files to the folder.
sendMail.gv requires:
* mail
sendSnmpTrap.gv requires:
* snmp
timeCondition.gv requires:
* joda

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,264 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.StringTokenizer;
/**
* @author frederic bregier
*/
public abstract class CIDR implements Comparable<CIDR>
{
/**
* The base address of the CIDR notation
*/
protected InetAddress baseAddress;
/**
* The mask used in the CIDR notation
*/
protected int cidrMask;
/**
* Create CIDR using the CIDR Notation
* @param baseAddress
* @param cidrMask
* @return the generated CIDR
* @throws UnknownHostException
*/
public static CIDR newCIDR(InetAddress baseAddress, int cidrMask) throws UnknownHostException
{
if (cidrMask < 0)
{
throw new UnknownHostException("Invalid mask length used: " + cidrMask);
}
if (baseAddress instanceof Inet4Address)
{
if (cidrMask > 32)
{
throw new UnknownHostException("Invalid mask length used: " + cidrMask);
}
return new CIDR4((Inet4Address) baseAddress, cidrMask);
}
// IPv6.
if (cidrMask > 128)
{
throw new UnknownHostException("Invalid mask length used: " + cidrMask);
}
return new CIDR6((Inet6Address) baseAddress, cidrMask);
}
/**
* Create CIDR using the normal Notation
* @param baseAddress
* @param scidrMask
* @return the generated CIDR
* @throws UnknownHostException
*/
public static CIDR newCIDR(InetAddress baseAddress, String scidrMask) throws UnknownHostException
{
int cidrMask = getNetMask(scidrMask);
if (cidrMask < 0)
{
throw new UnknownHostException("Invalid mask length used: " + cidrMask);
}
if (baseAddress instanceof Inet4Address)
{
if (cidrMask > 32)
{
throw new UnknownHostException("Invalid mask length used: " + cidrMask);
}
return new CIDR4((Inet4Address) baseAddress, cidrMask);
}
cidrMask += 96;
// IPv6.
if (cidrMask > 128)
{
throw new UnknownHostException("Invalid mask length used: " + cidrMask);
}
return new CIDR6((Inet6Address) baseAddress, cidrMask);
}
/**
* Create CIDR using the CIDR or normal Notation<BR>
* i.e.:
* CIDR subnet = newCIDR ("10.10.10.0/24"); or
* CIDR subnet = newCIDR ("1fff:0:0a88:85a3:0:0:ac1f:8001/24"); or
* CIDR subnet = newCIDR ("10.10.10.0/255.255.255.0");
* @param cidr
* @return the generated CIDR
* @throws UnknownHostException
*/
public static CIDR newCIDR(String cidr) throws UnknownHostException
{
int p = cidr.indexOf("/");
if (p < 0)
{
throw new UnknownHostException("Invalid CIDR notation used: " + cidr);
}
String addrString = cidr.substring(0, p);
String maskString = cidr.substring(p + 1);
InetAddress addr = addressStringToInet(addrString);
int mask = 0;
if (maskString.indexOf(".") < 0)
{
mask = parseInt(maskString, -1);
}
else
{
mask = getNetMask(maskString);
if (addr instanceof Inet6Address)
{
mask += 96;
}
}
if (mask < 0)
{
throw new UnknownHostException("Invalid mask length used: " + maskString);
}
return newCIDR(addr, mask);
}
/** @return the baseAddress of the CIDR block. */
public InetAddress getBaseAddress()
{
return baseAddress;
}
/** @return the Mask length. */
public int getMask()
{
return cidrMask;
}
/** @return the textual CIDR notation. */
@Override
public String toString()
{
return baseAddress.getHostAddress() + "/" + cidrMask;
}
/** @return the end address of this block. */
public abstract InetAddress getEndAddress();
/**
* Compares the given InetAddress against the CIDR and returns true if
* the ip is in the subnet-ip-range and false if not.
* @param inetAddress
* @return returns true if the given IP address is inside the currently
* set network.
*/
public abstract boolean contains(InetAddress inetAddress);
/** Convert an IPv4 or IPv6 textual representation into an
* InetAddress.
* @param addr
* @return the created InetAddress
* @throws UnknownHostException
*/
private static InetAddress addressStringToInet(String addr) throws UnknownHostException
{
return InetAddress.getByName(addr);
}
/**
* Get the Subnet's Netmask in Decimal format.<BR>
* i.e.: getNetMask("255.255.255.0") returns the integer CIDR mask
* @param netMask a network mask
* @return the integer CIDR mask
* */
private static int getNetMask(String netMask)
{
StringTokenizer nm = new StringTokenizer(netMask, ".");
int i = 0;
int[] netmask = new int[4];
while (nm.hasMoreTokens())
{
netmask[i] = Integer.parseInt(nm.nextToken());
i++;
}
int mask1 = 0;
for (i = 0; i < 4; i++)
{
mask1 += Integer.bitCount(netmask[i]);
}
return mask1;
}
/** @param intstr a string containing an integer.
* @param def the default if the string does not contain a valid
* integer.
* @return the inetAddress from the integer
*/
private static int parseInt(String intstr, int def)
{
Integer res;
if (intstr == null)
{
return def;
}
try
{
res = Integer.decode(intstr);
}
catch (Exception e)
{
res = new Integer(def);
}
return res.intValue();
}
/**
* Compute a byte representation of IpV4 from a IpV6
* @param address
* @return the byte representation
* @throws IllegalArgumentException if the IpV6 cannot be mapped to IpV4
*/
public static byte[] getIpV4FromIpV6(Inet6Address address) throws IllegalArgumentException
{
byte[] baddr = address.getAddress();
for (int i = 0; i < 9; i++)
{
if (baddr[i] != 0)
{
throw new IllegalArgumentException("This IPv6 address cannot be used in IPv4 context");
}
}
if (baddr[10] != 0 && baddr[10] != 0xFF || baddr[11] != 0 && baddr[11] != 0xFF)
{
throw new IllegalArgumentException("This IPv6 address cannot be used in IPv4 context");
}
return new byte[]
{baddr[12], baddr[13], baddr[14], baddr[15]};
}
/**
* Compute a byte representation of IpV6 from a IpV4
* @param address
* @return the byte representation
* @throws IllegalArgumentException if the IpV6 cannot be mapped to IpV4
*/
public static byte[] getIpV6FromIpV4(Inet4Address address) throws IllegalArgumentException
{
byte[] baddr = address.getAddress();
return new byte[]
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, baddr[0], baddr[1], baddr[2], baddr[3]};
}
}

View file

@ -0,0 +1,196 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* @author frederic bregier
*/
public class CIDR4 extends CIDR
{
/**
* The integer for the base address
*/
private int addressInt;
/**
* The integer for the end address
*/
private final int addressEndInt;
/**
* @param newaddr
* @param mask
*/
protected CIDR4(Inet4Address newaddr, int mask)
{
cidrMask = mask;
addressInt = ipv4AddressToInt(newaddr);
int newmask = ipv4PrefixLengthToMask(mask);
addressInt &= newmask;
try
{
baseAddress = intToIPv4Address(addressInt);
}
catch (UnknownHostException e)
{
// this should never happen
}
addressEndInt = addressInt + ipv4PrefixLengthToLength(cidrMask) - 1;
}
@Override
public InetAddress getEndAddress()
{
try
{
return intToIPv4Address(addressEndInt);
}
catch (UnknownHostException e)
{
// this should never happen
return null;
}
}
public int compareTo(CIDR arg)
{
if (arg instanceof CIDR6)
{
byte[] address = getIpV4FromIpV6((Inet6Address) arg.baseAddress);
int net = ipv4AddressToInt(address);
if (net == addressInt && arg.cidrMask == cidrMask)
{
return 0;
}
if (net < addressInt)
{
return 1;
}
else if (net > addressInt)
{
return -1;
}
else if (arg.cidrMask < cidrMask)
{
return -1;
}
return 1;
}
CIDR4 o = (CIDR4) arg;
if (o.addressInt == addressInt && o.cidrMask == cidrMask)
{
return 0;
}
if (o.addressInt < addressInt)
{
return 1;
}
else if (o.addressInt > addressInt)
{
return -1;
}
else if (o.cidrMask < cidrMask)
{
// greater Mask means less IpAddresses so -1
return -1;
}
return 1;
}
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.CIDR#contains(java.net.InetAddress)
*/
@Override
public boolean contains(InetAddress inetAddress)
{
int search = ipv4AddressToInt(inetAddress);
return search >= addressInt && search <= addressEndInt;
}
/** Given an IPv4 baseAddress length, return the block length. I.e., a
* baseAddress length of 24 will return 256. */
private static int ipv4PrefixLengthToLength(int prefix_length)
{
return 1 << 32 - prefix_length;
}
/** Given a baseAddress length, return a netmask. I.e, a baseAddress length
* of 24 will return 0xFFFFFF00. */
private static int ipv4PrefixLengthToMask(int prefix_length)
{
return ~((1 << 32 - prefix_length) - 1);
}
/** Convert an integer into an (IPv4) InetAddress.
* @param addr
* @return the created InetAddress
* @throws UnknownHostException
* @throws UnknownHostException
*/
private static InetAddress intToIPv4Address(int addr) throws UnknownHostException
{
byte[] a = new byte[4];
a[0] = (byte) (addr >> 24 & 0xFF);
a[1] = (byte) (addr >> 16 & 0xFF);
a[2] = (byte) (addr >> 8 & 0xFF);
a[3] = (byte) (addr & 0xFF);
return InetAddress.getByAddress(a);
}
/** Given an IPv4 address, convert it into an integer.
* @param addr
* @return the integer representation of the InetAddress
*
* @throws IllegalArgumentException if the address is really an
* IPv6 address.
*/
private static int ipv4AddressToInt(InetAddress addr)
{
byte[] address = null;
if (addr instanceof Inet6Address)
{
address = getIpV4FromIpV6((Inet6Address) addr);
}
else
{
address = addr.getAddress();
}
return ipv4AddressToInt(address);
}
/** Given an IPv4 address as array of bytes, convert it into an integer.
* @param address
* @return the integer representation of the InetAddress
*
* @throws IllegalArgumentException if the address is really an
* IPv6 address.
*/
private static int ipv4AddressToInt(byte[] address)
{
int net = 0;
for (byte addres : address)
{
net <<= 8;
net |= addres & 0xFF;
}
return net;
}
}

View file

@ -0,0 +1,200 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.math.BigInteger;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.jboss.netty.logging.InternalLogger;
import org.jboss.netty.logging.InternalLoggerFactory;
/**
* @author frederic bregier
*/
public class CIDR6 extends CIDR
{
private static final InternalLogger logger = InternalLoggerFactory.getInstance(CIDR6.class);
/**
* The big integer for the base address
*/
private BigInteger addressBigInt;
/**
* The big integer for the end address
*/
private final BigInteger addressEndBigInt;
/**
* @param newaddress
* @param newmask
*/
protected CIDR6(Inet6Address newaddress, int newmask)
{
cidrMask = newmask;
addressBigInt = ipv6AddressToBigInteger(newaddress);
BigInteger mask = ipv6CidrMaskToMask(newmask);
try
{
addressBigInt = addressBigInt.and(mask);
baseAddress = bigIntToIPv6Address(addressBigInt);
}
catch (UnknownHostException e)
{
// this should never happen.
}
addressEndBigInt = addressBigInt.add(ipv6CidrMaskToBaseAddress(cidrMask)).subtract(BigInteger.ONE);
}
@Override
public InetAddress getEndAddress()
{
try
{
return bigIntToIPv6Address(addressEndBigInt);
}
catch (UnknownHostException e)
{
logger.error("invalid ip address calculated as an end address");
return null;
}
}
public int compareTo(CIDR arg)
{
if (arg instanceof CIDR4)
{
BigInteger net = ipv6AddressToBigInteger(arg.baseAddress);
int res = net.compareTo(addressBigInt);
if (res == 0)
{
if (arg.cidrMask == cidrMask)
{
return 0;
}
else if (arg.cidrMask < cidrMask)
{
return -1;
}
return 1;
}
return res;
}
CIDR6 o = (CIDR6) arg;
if (o.addressBigInt.equals(addressBigInt) && o.cidrMask == cidrMask)
{
return 0;
}
int res = o.addressBigInt.compareTo(addressBigInt);
if (res == 0)
{
if (o.cidrMask < cidrMask)
{
// greater Mask means less IpAddresses so -1
return -1;
}
return 1;
}
return res;
}
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.CIDR#contains(java.net.InetAddress)
*/
@Override
public boolean contains(InetAddress inetAddress)
{
BigInteger search = ipv6AddressToBigInteger(inetAddress);
return search.compareTo(addressBigInt) >= 0 && search.compareTo(addressEndBigInt) <= 0;
}
/** Given an IPv6 baseAddress length, return the block length. I.e., a
* baseAddress length of 96 will return 2**32. */
private static BigInteger ipv6CidrMaskToBaseAddress(int cidrMask)
{
return BigInteger.ONE.shiftLeft(128 - cidrMask);
}
private static BigInteger ipv6CidrMaskToMask(int cidrMask)
{
return BigInteger.ONE.shiftLeft(128 - cidrMask).subtract(BigInteger.ONE).not();
}
/** Given an IPv6 address, convert it into a BigInteger.
* @param addr
* @return the integer representation of the InetAddress
*
* @throws IllegalArgumentException if the address is not an IPv6
* address.
*/
private static BigInteger ipv6AddressToBigInteger(InetAddress addr)
{
byte[] ipv6;
if (addr instanceof Inet4Address)
{
ipv6 = getIpV6FromIpV4((Inet4Address) addr);
}
else
{
ipv6 = addr.getAddress();
}
if (ipv6[0] == -1)
{
return new BigInteger(1, ipv6);
}
return new BigInteger(ipv6);
}
/** Convert a big integer into an IPv6 address.
* @param addr
* @return the inetAddress from the integer
*
* @throws UnknownHostException if the big integer is too large,
* and thus an invalid IPv6 address.
*/
private static InetAddress bigIntToIPv6Address(BigInteger addr) throws UnknownHostException
{
byte[] a = new byte[16];
byte[] b = addr.toByteArray();
if (b.length > 16 && !(b.length == 17 && b[0] == 0))
{
throw new UnknownHostException("invalid IPv6 address (too big)");
}
if (b.length == 16)
{
return InetAddress.getByAddress(b);
}
// handle the case where the IPv6 address starts with "FF".
if (b.length == 17)
{
System.arraycopy(b, 1, a, 0, 16);
}
else
{
// copy the address into a 16 byte array, zero-filled.
int p = 16 - b.length;
for (int i = 0; i < b.length; i++)
{
a[p + i] = b[i];
}
}
return InetAddress.getByAddress(a);
}
}

View file

@ -0,0 +1,74 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2010, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetSocketAddress;
import org.jboss.netty.channel.ChannelEvent;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
/**
* The listener interface for receiving ipFilter events.
*
* @see IpFilteringHandler
*
* @author Ron
*/
public interface IpFilterListener
{
/**
* Called when the channel has the CONNECTED status and the channel was allowed by a previous call to accept().
* This method enables your implementation to send a message back to the client before closing
* or whatever you need. This method returns a ChannelFuture on which the implementation
* can wait uninterruptibly before continuing.<br>
* For instance, If a message is sent back, the corresponding ChannelFuture has to be returned.
* @param ctx
* @param e
* @param inetSocketAddress the remote {@link InetSocketAddress} from client
* @return the associated ChannelFuture to be waited for before closing the channel. Null is allowed.
*/
public ChannelFuture allowed(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress);
/**
* Called when the channel has the CONNECTED status and the channel was refused by a previous call to accept().
* This method enables your implementation to send a message back to the client before closing
* or whatever you need. This method returns a ChannelFuture on which the implementation
* will wait uninterruptibly before closing the channel.<br>
* For instance, If a message is sent back, the corresponding ChannelFuture has to be returned.
* @param ctx
* @param e
* @param inetSocketAddress the remote {@link InetSocketAddress} from client
* @return the associated ChannelFuture to be waited for before closing the channel. Null is allowed.
*/
public ChannelFuture refused(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress);
/**
* Called in handleUpstream, if this channel was previously blocked,
* to check if whatever the event, it should be passed to the next entry in the pipeline.<br>
* If one wants to not block events, just overridden this method by returning always true.<br><br>
* <b>Note that OPENED and BOUND events are still passed to the next entry in the pipeline since
* those events come out before the CONNECTED event and so the possibility to filter the connection.</b>
* @param ctx
* @param e
* @return True if the event should continue, False if the event should not continue
* since this channel was blocked by this filter
*/
public boolean continues(ChannelHandlerContext ctx, ChannelEvent e);
}

View file

@ -0,0 +1,37 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
/**
* This Interface defines an Ip Filter Rule.
*
* @author frederic bregier
*
*/
public interface IpFilterRule extends IpSet
{
/**
*
* @return True if this Rule is an ALLOW rule
*/
public boolean isAllowRule();
/**
*
* @return True if this Rule is a DENY rule
*/
public boolean isDenyRule();
}

View file

@ -0,0 +1,327 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.jboss.netty.channel.ChannelEvent;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipelineCoverage;
/**
* Implementation of Filter of IP based on ALLOW and DENY rules.<br>
* <br><br>
* This implementation could be changed by implementing a new {@link IpFilterRule} than default
* {@link IpV4SubnetFilterRule} (IPV4 support only), {@link IpSubnetFilterRule} (IPV4 and IPV6 support) or {@link IpPatternFilterRule} (IP and host name string pattern support) .<br>
* <br>
* The check is done by going from step to step in the underlying array of IpFilterRule.<br>
* Each {@link IpFilterRule} answers to the method accept if the {@link InetAddress} is accepted or not,
* according to its implementation. If an InetAddress arrives at the end of the list, as in Firewall
* usual rules, the InetAddress is therefore accepted by default.<br>
* <ul>
* <li>If it was constructed with True as first argument,
* the IpFilterRule is an ALLOW rule (every InetAddress that fits in the rule will be accepted).</li>
* <li>If it was constructed with False as first argument,
* the IpFilterRule is a DENY rule (every InetAddress that fits in the rule will be refused).</li>
* </ul><br>
* <br>
* An empty list means allow all (no limitation).<br><br>
* <b>For efficiency reason, you should not add/remove too frequently IpFilterRules to/from this handler.
* You should prefer to replace an entry (<tt>set</tt> method) with an ALLOW/DENY ALL IpFilterRule
* if possible.</b><br><br><br>
* <b>This handler should be created only once and reused on every pipeline since it handles
* a global status of what is allowed or blocked.</b><br><br>
*
* Note that {@link IpSubnetFilterRule} which supports IPV4 and IPV6 should be used with as much as
* possible no mixed IP protocol. Both IPV4 and IPV6 are supported but a mix (IpFilter in IPV6 notation
* and the address from the channel in IPV4, or the reverse) can lead to wrong result.
* @author frederic bregier
*
*/
@ChannelPipelineCoverage("all")
public class IpFilterRuleHandler extends IpFilteringHandlerImpl
{
/**
* List of {@link IpFilterRule}
*/
private final CopyOnWriteArrayList<IpFilterRule> ipFilterRuleList = new CopyOnWriteArrayList<IpFilterRule>();
/**
* Constructor from a new list of IpFilterRule
* @param newList
*/
public IpFilterRuleHandler(List<IpFilterRule> newList)
{
if (newList != null)
{
ipFilterRuleList.addAll(newList);
}
}
/**
* Empty constructor (no IpFilterRule in the List at construction). In such a situation,
* empty list implies allow all.
*/
public IpFilterRuleHandler()
{
}
// Below are methods directly inspired from CopyOnWriteArrayList methods
/**
* Add an ipFilterRule in the list at the end
* @param ipFilterRule
*/
public void add(IpFilterRule ipFilterRule)
{
if (ipFilterRule == null)
{
throw new NullPointerException("IpFilterRule can not be null");
}
ipFilterRuleList.add(ipFilterRule);
}
/**
* Add an ipFilterRule in the list at the specified position (shifting to the right other elements)
* @param index
* @param ipFilterRule
*/
public void add(int index, IpFilterRule ipFilterRule)
{
if (ipFilterRule == null)
{
throw new NullPointerException("IpFilterRule can not be null");
}
ipFilterRuleList.add(index, ipFilterRule);
}
/**
* Appends all of the elements in the specified collection to the end of this list,
* in the order that they are returned by the specified collection's iterator.
* @param c
*/
public void addAll(Collection<IpFilterRule> c)
{
if (c == null)
{
throw new NullPointerException("Collection can not be null");
}
ipFilterRuleList.addAll(c);
}
/**
* Inserts all of the elements in the specified collection into this list, starting at the specified position.
* @param index
* @param c
*/
public void addAll(int index, Collection<IpFilterRule> c)
{
if (c == null)
{
throw new NullPointerException("Collection can not be null");
}
ipFilterRuleList.addAll(index, c);
}
/**
* Append the element if not present.
* @param c
* @return the number of elements added
*/
public int addAllAbsent(Collection<IpFilterRule> c)
{
if (c == null)
{
throw new NullPointerException("Collection can not be null");
}
return ipFilterRuleList.addAllAbsent(c);
}
/**
* Append the element if not present.
* @param ipFilterRule
* @return true if the element was added
*/
public boolean addIfAbsent(IpFilterRule ipFilterRule)
{
if (ipFilterRule == null)
{
throw new NullPointerException("IpFilterRule can not be null");
}
return ipFilterRuleList.addIfAbsent(ipFilterRule);
}
/**
* Clear the list
*/
public void clear()
{
ipFilterRuleList.clear();
}
/**
* Returns true if this list contains the specified element
* @param ipFilterRule
* @return true if this list contains the specified element
*/
public boolean contains(IpFilterRule ipFilterRule)
{
if (ipFilterRule == null)
{
throw new NullPointerException("IpFilterRule can not be null");
}
return ipFilterRuleList.contains(ipFilterRule);
}
/**
* Returns true if this list contains all of the elements of the specified collection
* @param c
* @return true if this list contains all of the elements of the specified collection
*/
public boolean containsAll(Collection<IpFilterRule> c)
{
if (c == null)
{
throw new NullPointerException("Collection can not be null");
}
return ipFilterRuleList.containsAll(c);
}
/**
* Returns the element at the specified position in this list
* @param index
* @return the element at the specified position in this list
*/
public IpFilterRule get(int index)
{
return ipFilterRuleList.get(index);
}
/**
* Returns true if this list contains no elements
* @return true if this list contains no elements
*/
public boolean isEmpty()
{
return ipFilterRuleList.isEmpty();
}
/**
* Remove the ipFilterRule from the list
* @param ipFilterRule
*/
public void remove(IpFilterRule ipFilterRule)
{
if (ipFilterRule == null)
{
throw new NullPointerException("IpFilterRule can not be null");
}
ipFilterRuleList.remove(ipFilterRule);
}
/**
* Removes the element at the specified position in this list
* @param index
* @return the element previously at the specified position
*/
public IpFilterRule remove(int index)
{
return ipFilterRuleList.remove(index);
}
/**
* Removes from this list all of its elements that are contained in the specified collection
* @param c
*/
public void removeAll(Collection<IpFilterRule> c)
{
if (c == null)
{
throw new NullPointerException("Collection can not be null");
}
ipFilterRuleList.removeAll(c);
}
/**
* Retains only the elements in this list that are contained in the specified collection
* @param c
*/
public void retainAll(Collection<IpFilterRule> c)
{
if (c == null)
{
throw new NullPointerException("Collection can not be null");
}
ipFilterRuleList.retainAll(c);
}
/**
* Replaces the element at the specified position in this list with the specified element
* @param index
* @param ipFilterRule
* @return the element previously at the specified position
*/
public IpFilterRule set(int index, IpFilterRule ipFilterRule)
{
if (ipFilterRule == null)
{
throw new NullPointerException("IpFilterRule can not be null");
}
return ipFilterRuleList.set(index, ipFilterRule);
}
/**
* Returns the number of elements in this list.
* @return the number of elements in this list.
*/
public int size()
{
return ipFilterRuleList.size();
}
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.IpFilteringHandler#accept(org.jboss.netty.channel.ChannelHandlerContext, org.jboss.netty.channel.ChannelEvent, java.net.InetSocketAddress)
*/
@Override
protected boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress)
throws Exception
{
if (ipFilterRuleList.isEmpty())
{
// No limitation neither in deny or allow, so accept
return true;
}
InetAddress inetAddress = inetSocketAddress.getAddress();
Iterator<IpFilterRule> iterator = ipFilterRuleList.iterator();
IpFilterRule ipFilterRule = null;
while (iterator.hasNext())
{
ipFilterRule = iterator.next();
if (ipFilterRule.contains(inetAddress))
{
// Match founds, is it a ALLOW or DENY rule
return ipFilterRule.isAllowRule();
}
}
// No limitation founds and no allow either, but as it is like Firewall rules, it is therefore accepted
return true;
}
}

View file

@ -0,0 +1,100 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2010, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.UnknownHostException;
import java.util.ArrayList;
import org.jboss.netty.logging.InternalLogger;
import org.jboss.netty.logging.InternalLoggerFactory;
/**
* The Class IpFilterRuleList is a helper class to generate a List of Rules from a string.
* In case of parse errors no exceptions are thrown. The error is logged.
* <br>
* Rule List Syntax:
* <br>
* <pre>
* RuleList ::= Rule[,Rule]*
* Rule ::= AllowRule | BlockRule
* AllowRule ::= +Filter
* BlockRule ::= -Filter
* Filter ::= PatternFilter | CIDRFilter
* PatternFilter ::= @see PatternRule
* CIDRFilter ::= c:CIDRFilter
* CIDRFilter ::= @see CIDR.newCIDR(String)
* </pre>
* <br>
* Example: allow only localhost:
* <br>
* new IPFilterRuleHandler().addAll(new IpFilterRuleList("+n:localhost, -n:*"));
* <br>
*
* @author Ron
*/
public class IpFilterRuleList extends ArrayList<IpFilterRule>
{
private static final long serialVersionUID = -6164162941749588780L;
private static final InternalLogger logger = InternalLoggerFactory.getInstance(IpFilterRuleList.class);
/**
* Instantiates a new ip filter rule list.
*
* @param rules the rules
*/
public IpFilterRuleList(String rules)
{
super();
parseRules(rules);
}
private void parseRules(String rules)
{
String[] ruless = rules.split(",");
for (String rule : ruless)
{
parseRule(rule.trim());
}
}
private void parseRule(String rule)
{
if (rule == null || rule.length() == 0)
return;
if (!(rule.startsWith("+") || rule.startsWith("-")))
{
logger.error("syntax error in ip filter rule:" + rule);
return;
}
boolean allow = rule.startsWith("+");
if (rule.charAt(1) == 'n' || rule.charAt(1) == 'i')
this.add(new PatternRule(allow, rule.substring(1)));
else if (rule.charAt(1) == 'c')
try
{
this.add(new IpSubnetFilterRule(allow, rule.substring(3)));
}
catch (UnknownHostException e)
{
logger.error("error parsing ip filter " + rule, e);
}
else
logger.error("syntax error in ip filter rule:" + rule);
}
}

View file

@ -0,0 +1,43 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2010, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.netty.handler.ipfilter;
import org.jboss.netty.channel.ChannelUpstreamHandler;
/**
* The Interface IpFilteringHandler.
* A Filter of IP.
* <br>
* Users can add an {@link IpFilterListener} to add specific actions in case a connection is allowed or refused.
*
* @author Ron
*/
public interface IpFilteringHandler extends ChannelUpstreamHandler
{
/**
* Sets the filter listener.
*
* @param listener the new ip filter listener
*/
public void setIpFilterListener(IpFilterListener listener);
/**
* Remove the filter listener.
*/
public void removeIpFilterListener();
}

View file

@ -0,0 +1,203 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2010, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetSocketAddress;
import org.jboss.netty.channel.ChannelEvent;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.Channels;
// TODO: Auto-generated Javadoc
/**
* General class that handle Ip Filtering.
*
* @author frederic bregier
*/
public abstract class IpFilteringHandlerImpl implements IpFilteringHandler
{
private IpFilterListener listener = null;
/**
* Called when the channel is connected. It returns True if the corresponding connection
* is to be allowed. Else it returns False.
* @param ctx
* @param e
* @param inetSocketAddress the remote {@link InetSocketAddress} from client
* @return True if the corresponding connection is allowed, else False.
* @throws Exception
*/
protected abstract boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress)
throws Exception;
/**
* Called when the channel has the CONNECTED status and the channel was refused by a previous call to accept().
* This method enables your implementation to send a message back to the client before closing
* or whatever you need. This method returns a ChannelFuture on which the implementation
* will wait uninterruptibly before closing the channel.<br>
* For instance, If a message is sent back, the corresponding ChannelFuture has to be returned.
* @param ctx
* @param e
* @param inetSocketAddress the remote {@link InetSocketAddress} from client
* @return the associated ChannelFuture to be waited for before closing the channel. Null is allowed.
* @throws Exception
*/
protected ChannelFuture handleRefusedChannel(ChannelHandlerContext ctx, ChannelEvent e,
InetSocketAddress inetSocketAddress) throws Exception
{
if (listener == null)
return null;
ChannelFuture result = listener.refused(ctx, e, inetSocketAddress);
return result;
}
protected ChannelFuture handleAllowedChannel(ChannelHandlerContext ctx, ChannelEvent e,
InetSocketAddress inetSocketAddress) throws Exception
{
if (listener == null)
return null;
ChannelFuture result = listener.allowed(ctx, e, inetSocketAddress);
return result;
}
/**
* Internal method to test if the current channel is blocked. Should not be overridden.
* @param ctx
* @return True if the current channel is blocked, else False
*/
protected boolean isBlocked(ChannelHandlerContext ctx)
{
return ctx.getAttachment() != null;
}
/**
* Called in handleUpstream, if this channel was previously blocked,
* to check if whatever the event, it should be passed to the next entry in the pipeline.<br>
* If one wants to not block events, just overridden this method by returning always true.<br><br>
* <b>Note that OPENED and BOUND events are still passed to the next entry in the pipeline since
* those events come out before the CONNECTED event and so the possibility to filter the connection.</b>
* @param ctx
* @param e
* @return True if the event should continue, False if the event should not continue
* since this channel was blocked by this filter
* @throws Exception
*/
protected boolean continues(ChannelHandlerContext ctx, ChannelEvent e) throws Exception
{
if (listener != null)
return listener.continues(ctx, e);
else
return false;
}
/* (non-Javadoc)
* @see org.jboss.netty.channel.ChannelUpstreamHandler#handleUpstream(org.jboss.netty.channel.ChannelHandlerContext, org.jboss.netty.channel.ChannelEvent)
*/
public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception
{
if (e instanceof ChannelStateEvent)
{
ChannelStateEvent evt = (ChannelStateEvent) e;
switch (evt.getState())
{
case OPEN :
case BOUND :
// Special case: OPEND and BOUND events are before CONNECTED,
// but CLOSED and UNBOUND events are after DISCONNECTED: should those events be blocked too?
if (isBlocked(ctx) && !continues(ctx, evt))
{
// don't pass to next level since channel was blocked early
return;
}
else
{
ctx.sendUpstream(e);
return;
}
case CONNECTED :
if (evt.getValue() != null)
{
// CONNECTED
InetSocketAddress inetSocketAddress = (InetSocketAddress) e.getChannel().getRemoteAddress();
if (!accept(ctx, e, inetSocketAddress))
{
ctx.setAttachment(Boolean.TRUE);
ChannelFuture future = handleRefusedChannel(ctx, e, inetSocketAddress);
if (future != null)
{
future.addListener(ChannelFutureListener.CLOSE);
}
else
{
Channels.close(e.getChannel());
}
if (isBlocked(ctx) && !continues(ctx, evt))
{
// don't pass to next level since channel was blocked early
return;
}
}
else
{
handleAllowedChannel(ctx, e, inetSocketAddress);
}
// This channel is not blocked
ctx.setAttachment(null);
}
else
{
// DISCONNECTED
if (isBlocked(ctx) && !continues(ctx, evt))
{
// don't pass to next level since channel was blocked early
return;
}
}
break;
}
}
if (isBlocked(ctx) && !continues(ctx, e))
{
// don't pass to next level since channel was blocked early
return;
}
// Whatever it is, if not blocked, goes to the next level
ctx.sendUpstream(e);
}
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.IpFilteringHandler#setIpFilterListener(org.jboss.netty.handler.ipfilter.IpFilterListener)
*/
public void setIpFilterListener(IpFilterListener listener)
{
this.listener = listener;
}
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.IpFilteringHandler#removeIpFilterListener()
*/
public void removeIpFilterListener()
{
this.listener = null;
}
}

View file

@ -0,0 +1,36 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetAddress;
/**
* This Interface defines an IpSet object.
*
* @author frederic bregier
*
*/
public interface IpSet
{
/**
* Compares the given InetAddress against the IpSet and returns true if
* the InetAddress is contained in this Rule and false if not.
* @param inetAddress1
* @return returns true if the given IP address is contained in the current
* IpSet.
*/
public boolean contains(InetAddress inetAddress1);
}

View file

@ -0,0 +1,198 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* This class allows to check if an IP V4 or V6 Address is contained in a subnet.<BR>
*
* Supported IP V4 Formats for the Subnets are: 1.1.1.1/255.255.255.255 or 1.1.1.1/32 (CIDR-Notation)
* and (InetAddress,Mask) where Mask is a integer for CIDR-notation or a String for Standard Mask notation.<BR>
* <BR><BR>Example1:<BR>
* <tt>IpV4Subnet ips = new IpV4Subnet("192.168.1.0/24");</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains("192.168.1.123"));</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains(inetAddress2));</tt><BR>
* <BR>Example1 bis:<BR>
* <tt>IpV4Subnet ips = new IpV4Subnet(inetAddress, 24);</tt><BR>
* where inetAddress is 192.168.1.0 and inetAddress2 is 192.168.1.123<BR>
* <BR><BR>Example2:<BR>
* <tt>IpV4Subnet ips = new IpV4Subnet("192.168.1.0/255.255.255.0");</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains("192.168.1.123"));</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains(inetAddress2));</tt><BR>
* <BR>Example2 bis:<BR>
* <tt>IpV4Subnet ips = new IpV4Subnet(inetAddress, "255.255.255.0");</tt><BR>
* where inetAddress is 192.168.1.0 and inetAddress2 is 192.168.1.123<BR>
* <BR>
* Supported IP V6 Formats for the Subnets are: a:b:c:d:e:f:g:h/NN (CIDR-Notation)
* or any IPV6 notations (like a:b:c:d::/NN, a:b:c:d:e:f:w.x.y.z/NN)
* and (InetAddress,Mask) where Mask is a integer for CIDR-notation
* and (InetAddress,subnet).<BR>
* <BR><BR>Example1:<BR>
* <tt>IpSubnet ips = new IpSubnet("1fff:0:0a88:85a3:0:0:0:0/24");</tt><BR>
* <tt>IpSubnet ips = new IpSubnet("1fff:0:0a88:85a3::/24");</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains("1fff:0:0a88:85a3:0:0:ac1f:8001"));</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains(inetAddress2));</tt><BR>
* <BR>Example1 bis:<BR>
* <tt>IpSubnet ips = new IpSubnet(inetAddress, 24);</tt><BR>
* where inetAddress2 is 1fff:0:0a88:85a3:0:0:ac1f:8001<BR>
*
* @author frederic bregier
*
*/
public class IpSubnet implements IpSet, Comparable<IpSubnet>
{
/**
* Internal representation
*/
private CIDR cidr = null;
/**
* Create IpSubnet for ALL (used for ALLOW or DENY ALL)
*/
public IpSubnet()
{
// ALLOW or DENY ALL
cidr = null;
}
/**
* Create IpSubnet using the CIDR or normal Notation<BR>
* i.e.:<br>
* IpSubnet subnet = new IpSubnet("10.10.10.0/24"); or<br>
* IpSubnet subnet = new IpSubnet("10.10.10.0/255.255.255.0"); or<br>
* IpSubnet subnet = new IpSubnet("1fff:0:0a88:85a3:0:0:0:0/24");
* @param netAddress a network address as string.
* @throws UnknownHostException
* */
public IpSubnet(String netAddress) throws UnknownHostException
{
cidr = CIDR.newCIDR(netAddress);
}
/**
* Create IpSubnet using the CIDR Notation
* @param inetAddress
* @param cidrNetMask
* @throws UnknownHostException
*/
public IpSubnet(InetAddress inetAddress, int cidrNetMask) throws UnknownHostException
{
cidr = CIDR.newCIDR(inetAddress, cidrNetMask);
}
/**
* Create IpSubnet using the normal Notation
* @param inetAddress
* @param netMask
* @throws UnknownHostException
*/
public IpSubnet(InetAddress inetAddress, String netMask) throws UnknownHostException
{
cidr = CIDR.newCIDR(inetAddress, netMask);
}
/**
* Compares the given IP-Address against the Subnet and returns true if
* the ip is in the subnet-ip-range and false if not.
* @param ipAddr an ipaddress
* @return returns true if the given IP address is inside the currently
* set network.
* @throws UnknownHostException
* */
public boolean contains(String ipAddr) throws UnknownHostException
{
InetAddress inetAddress1 = InetAddress.getByName(ipAddr);
return this.contains(inetAddress1);
}
/**
* Compares the given InetAddress against the Subnet and returns true if
* the ip is in the subnet-ip-range and false if not.
* @param inetAddress
* @return returns true if the given IP address is inside the currently
* set network.
* */
public boolean contains(InetAddress inetAddress)
{
if (cidr == null)
{
// ANY
return true;
}
return cidr.contains(inetAddress);
}
@Override
public String toString()
{
return cidr.toString();
}
@Override
public boolean equals(Object o)
{
if (!(o instanceof IpSubnet))
{
return false;
}
IpSubnet ipSubnet = (IpSubnet) o;
return ipSubnet.cidr.equals(cidr);
}
/**
* Compare two IpSubnet
*/
public int compareTo(IpSubnet o)
{
return cidr.toString().compareTo(o.cidr.toString());
}
/**
* Simple test functions
* @param args
* where args[0] is the netmask (standard or CIDR notation) and optional args[1] is
* the inetAddress to test with this IpSubnet
*/
public static void main(String[] args)
{
if (args.length != 0)
{
IpSubnet ipSubnet = null;
try
{
ipSubnet = new IpSubnet(args[0]);
}
catch (UnknownHostException e)
{
return;
}
System.out.println("IpSubnet: " + ipSubnet.toString() + " from " + ipSubnet.cidr.getBaseAddress() + " to "
+ ipSubnet.cidr.getEndAddress() + " mask " + ipSubnet.cidr.getMask());
if (args.length > 1)
{
try
{
System.out.println("Is IN: " + args[1] + " " + ipSubnet.contains(args[1]));
}
catch (UnknownHostException e)
{
}
}
}
}
}

View file

@ -0,0 +1,91 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* Ip V4 and Ip V6 filter rule.<br>
* <br>
* Note that mix of IPV4 and IPV6 is allowed but it is not recommended. So it is preferable to not
* mix IPV4 addresses with IPV6 rules, even if it should work.
* @author frederic bregier
*
*/
public class IpSubnetFilterRule extends IpSubnet implements IpFilterRule
{
/**
* Is this IpV4Subnet an ALLOW or DENY rule
*/
private boolean isAllowRule = true;
/**
* Constructor for a ALLOW or DENY ALL
* @param allow True for ALLOW, False for DENY
*/
public IpSubnetFilterRule(boolean allow)
{
super();
isAllowRule = allow;
}
/**
* @param allow True for ALLOW, False for DENY
* @param inetAddress
* @param cidrNetMask
* @throws UnknownHostException
*/
public IpSubnetFilterRule(boolean allow, InetAddress inetAddress, int cidrNetMask) throws UnknownHostException
{
super(inetAddress, cidrNetMask);
isAllowRule = allow;
}
/**
* @param allow True for ALLOW, False for DENY
* @param inetAddress
* @param netMask
* @throws UnknownHostException
*/
public IpSubnetFilterRule(boolean allow, InetAddress inetAddress, String netMask) throws UnknownHostException
{
super(inetAddress, netMask);
isAllowRule = allow;
}
/**
* @param allow True for ALLOW, False for DENY
* @param netAddress
* @throws UnknownHostException
*/
public IpSubnetFilterRule(boolean allow, String netAddress) throws UnknownHostException
{
super(netAddress);
isAllowRule = allow;
}
public boolean isAllowRule()
{
return isAllowRule;
}
public boolean isDenyRule()
{
return !isAllowRule;
}
}

View file

@ -0,0 +1,332 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.StringTokenizer;
import java.util.Vector;
/**
* This class allows to check if an IP-V4-Address is contained in a subnet.<BR>
* Supported Formats for the Subnets are: 1.1.1.1/255.255.255.255 or 1.1.1.1/32 (CIDR-Notation)
* and (InetAddress,Mask) where Mask is a integer for CIDR-notation or a String for Standard Mask notation.<BR>
* <BR><BR>Example1:<BR>
* <tt>IpV4Subnet ips = new IpV4Subnet("192.168.1.0/24");</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains("192.168.1.123"));</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains(inetAddress2));</tt><BR>
* <BR>Example1 bis:<BR>
* <tt>IpV4Subnet ips = new IpV4Subnet(inetAddress, 24);</tt><BR>
* where inetAddress is 192.168.1.0 and inetAddress2 is 192.168.1.123<BR>
* <BR><BR>Example2:<BR>
* <tt>IpV4Subnet ips = new IpV4Subnet("192.168.1.0/255.255.255.0");</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains("192.168.1.123"));</tt><BR>
* <tt>System.out.println("Result: "+ ips.contains(inetAddress2));</tt><BR>
* <BR>Example2 bis:<BR>
* <tt>IpV4Subnet ips = new IpV4Subnet(inetAddress, "255.255.255.0");</tt><BR>
* where inetAddress is 192.168.1.0 and inetAddress2 is 192.168.1.123<BR>
* @author frederic bregier
*
*/
public class IpV4Subnet implements IpSet, Comparable<IpV4Subnet>
{
private static final int SUBNET_MASK = 0x80000000;
private static final int BYTE_ADDRESS_MASK = 0xFF;
private InetAddress inetAddress;
private int subnet;
private int mask;
private int cidrMask;
/**
* Create IpV4Subnet for ALL (used for ALLOW or DENY ALL)
*/
public IpV4Subnet()
{
// ALLOW or DENY ALL
mask = -1;
// other will be ignored
inetAddress = null;
subnet = 0;
cidrMask = 0;
}
/**
* Create IpV4Subnet using the CIDR or normal Notation<BR>
* i.e.:
* IpV4Subnet subnet = new IpV4Subnet("10.10.10.0/24"); or
* IpV4Subnet subnet = new IpV4Subnet("10.10.10.0/255.255.255.0");
* @param netAddress a network address as string.
* @throws UnknownHostException
* */
public IpV4Subnet(String netAddress) throws UnknownHostException
{
setNetAddress(netAddress);
}
/**
* Create IpV4Subnet using the CIDR Notation
* @param inetAddress
* @param cidrNetMask
*/
public IpV4Subnet(InetAddress inetAddress, int cidrNetMask)
{
setNetAddress(inetAddress, cidrNetMask);
}
/**
* Create IpV4Subnet using the normal Notation
* @param inetAddress
* @param netMask
*/
public IpV4Subnet(InetAddress inetAddress, String netMask)
{
setNetAddress(inetAddress, netMask);
}
/**
* Sets the Network Address in either CIDR or Decimal Notation.<BR>
* i.e.: setNetAddress("1.1.1.1/24"); or<BR>
* setNetAddress("1.1.1.1/255.255.255.0");<BR>
* @param netAddress a network address as string.
* @throws UnknownHostException
* */
private void setNetAddress(String netAddress) throws UnknownHostException
{
Vector<Object> vec = new Vector<Object>();
StringTokenizer st = new StringTokenizer(netAddress, "/");
while (st.hasMoreTokens())
{
vec.add(st.nextElement());
}
if (vec.get(1).toString().length() < 3)
{
setNetId(vec.get(0).toString());
setCidrNetMask(Integer.parseInt(vec.get(1).toString()));
}
else
{
setNetId(vec.get(0).toString());
setNetMask(vec.get(1).toString());
}
}
/**
* Sets the Network Address in CIDR Notation.
* @param inetAddress
* @param cidrNetMask
* */
private void setNetAddress(InetAddress inetAddress, int cidrNetMask)
{
setNetId(inetAddress);
setCidrNetMask(cidrNetMask);
}
/**
* Sets the Network Address in Decimal Notation.
* @param inetAddress
* @param netMask
* */
private void setNetAddress(InetAddress inetAddress, String netMask)
{
setNetId(inetAddress);
setNetMask(netMask);
}
/**
* Sets the BaseAdress of the Subnet.<BR>
* i.e.: setNetId("192.168.1.0");
* @param netId a network ID
* @throws UnknownHostException
* */
private void setNetId(String netId) throws UnknownHostException
{
InetAddress inetAddress1 = InetAddress.getByName(netId);
this.setNetId(inetAddress1);
}
/**
* Compute integer representation of InetAddress
* @param inetAddress1
* @return the integer representation
*/
private int toInt(InetAddress inetAddress1)
{
byte[] address = inetAddress1.getAddress();
int net = 0;
for (byte addres : address)
{
net <<= 8;
net |= addres & BYTE_ADDRESS_MASK;
}
return net;
}
/**
* Sets the BaseAdress of the Subnet.
* @param inetAddress
* */
private void setNetId(InetAddress inetAddress)
{
this.inetAddress = inetAddress;
subnet = toInt(inetAddress);
}
/**
* Sets the Subnet's Netmask in Decimal format.<BR>
* i.e.: setNetMask("255.255.255.0");
* @param netMask a network mask
* */
private void setNetMask(String netMask)
{
StringTokenizer nm = new StringTokenizer(netMask, ".");
int i = 0;
int[] netmask = new int[4];
while (nm.hasMoreTokens())
{
netmask[i] = Integer.parseInt(nm.nextToken());
i++;
}
int mask1 = 0;
for (i = 0; i < 4; i++)
{
mask1 += Integer.bitCount(netmask[i]);
}
setCidrNetMask(mask1);
}
/**
* Sets the CIDR Netmask<BR>
* i.e.: setCidrNetMask(24);
* @param cidrNetMask a netmask in CIDR notation
* */
private void setCidrNetMask(int cidrNetMask)
{
cidrMask = cidrNetMask;
mask = SUBNET_MASK >> cidrMask - 1;
}
/**
* Compares the given IP-Address against the Subnet and returns true if
* the ip is in the subnet-ip-range and false if not.
* @param ipAddr an ipaddress
* @return returns true if the given IP address is inside the currently
* set network.
* @throws UnknownHostException
* */
public boolean contains(String ipAddr) throws UnknownHostException
{
InetAddress inetAddress1 = InetAddress.getByName(ipAddr);
return this.contains(inetAddress1);
}
/**
* Compares the given InetAddress against the Subnet and returns true if
* the ip is in the subnet-ip-range and false if not.
* @param inetAddress1
* @return returns true if the given IP address is inside the currently
* set network.
* */
public boolean contains(InetAddress inetAddress1)
{
if (mask == -1)
{
// ANY
return true;
}
return (toInt(inetAddress1) & mask) == subnet;
}
@Override
public String toString()
{
return inetAddress.getHostAddress() + "/" + cidrMask;
}
@Override
public boolean equals(Object o)
{
if (!(o instanceof IpV4Subnet))
{
return false;
}
IpV4Subnet ipV4Subnet = (IpV4Subnet) o;
return ipV4Subnet.subnet == subnet && ipV4Subnet.cidrMask == cidrMask;
}
/**
* Compare two IpV4Subnet
*/
public int compareTo(IpV4Subnet o)
{
if (o.subnet == subnet && o.cidrMask == cidrMask)
{
return 0;
}
if (o.subnet < subnet)
{
return 1;
}
else if (o.subnet > subnet)
{
return -1;
}
else if (o.cidrMask < cidrMask)
{
// greater Mask means less IpAddresses so -1
return -1;
}
return 1;
}
/**
* Simple test functions
* @param args
* where args[0] is the netmask (standard or CIDR notation) and optional args[1] is
* the inetAddress to test with this IpV4Subnet
*/
public static void main(String[] args)
{
if (args.length != 0)
{
IpV4Subnet ipV4Subnet = null;
try
{
ipV4Subnet = new IpV4Subnet(args[0]);
}
catch (UnknownHostException e)
{
return;
}
if (args.length > 1)
{
try
{
System.out.println("Is IN: " + args[1] + " " + ipV4Subnet.contains(args[1]));
}
catch (UnknownHostException e)
{
}
}
}
}
}

View file

@ -0,0 +1,86 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* IpV4 only Filter Rule
* @author frederic bregier
*
*/
public class IpV4SubnetFilterRule extends IpV4Subnet implements IpFilterRule
{
/**
* Is this IpV4Subnet an ALLOW or DENY rule
*/
private boolean isAllowRule = true;
/**
* Constructor for a ALLOW or DENY ALL
* @param allow True for ALLOW, False for DENY
*/
public IpV4SubnetFilterRule(boolean allow)
{
super();
isAllowRule = allow;
}
/**
* @param allow True for ALLOW, False for DENY
* @param inetAddress
* @param cidrNetMask
*/
public IpV4SubnetFilterRule(boolean allow, InetAddress inetAddress, int cidrNetMask)
{
super(inetAddress, cidrNetMask);
isAllowRule = allow;
}
/**
* @param allow True for ALLOW, False for DENY
* @param inetAddress
* @param netMask
*/
public IpV4SubnetFilterRule(boolean allow, InetAddress inetAddress, String netMask)
{
super(inetAddress, netMask);
isAllowRule = allow;
}
/**
* @param allow True for ALLOW, False for DENY
* @param netAddress
* @throws UnknownHostException
*/
public IpV4SubnetFilterRule(boolean allow, String netAddress) throws UnknownHostException
{
super(netAddress);
isAllowRule = allow;
}
public boolean isAllowRule()
{
return isAllowRule;
}
public boolean isDenyRule()
{
return !isAllowRule;
}
}

View file

@ -0,0 +1,92 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import org.jboss.netty.channel.ChannelEvent;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipelineCoverage;
import org.jboss.netty.channel.ChannelState;
import org.jboss.netty.channel.ChannelStateEvent;
/**
* Handler that block any new connection if there are already a currently active
* channel connected with the same InetAddress (IP).<br>
* <br>
*
* Take care to not change isBlocked method except if you know what you are doing
* since it is used to test if the current closed connection is to be removed
* or not from the map of currently connected channel.
*
* @author frederic bregier
*
*/
@ChannelPipelineCoverage("all")
public class OneIpFilterHandler extends IpFilteringHandlerImpl
{
/**
* HashMap of current remote connected InetAddress
*/
private final ConcurrentMap<InetAddress, Boolean> connectedSet = new ConcurrentHashMap<InetAddress, Boolean>();
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.IpFilteringHandler#accept(org.jboss.netty.channel.ChannelHandlerContext, org.jboss.netty.channel.ChannelEvent, java.net.InetSocketAddress)
*/
@Override
protected boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress)
throws Exception
{
InetAddress inetAddress = inetSocketAddress.getAddress();
if (connectedSet.containsKey(inetAddress))
{
return false;
}
connectedSet.put(inetAddress, Boolean.TRUE);
return true;
}
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.IpFilteringHandler#handleUpstream(org.jboss.netty.channel.ChannelHandlerContext, org.jboss.netty.channel.ChannelEvent)
*/
@Override
public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception
{
super.handleUpstream(ctx, e);
// Try to remove entry from Map if already exists
if (e instanceof ChannelStateEvent)
{
ChannelStateEvent evt = (ChannelStateEvent) e;
if (evt.getState() == ChannelState.CONNECTED)
{
if (evt.getValue() == null)
{
// DISCONNECTED but was this channel blocked or not
if (isBlocked(ctx))
{
// remove inetsocketaddress from set since this channel was not blocked before
InetSocketAddress inetSocketAddress = (InetSocketAddress) e.getChannel().getRemoteAddress();
connectedSet.remove(inetSocketAddress.getAddress());
}
}
}
}
}
}

View file

@ -0,0 +1,207 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2010, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.netty.handler.ipfilter;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.regex.Pattern;
import org.jboss.netty.logging.InternalLogger;
import org.jboss.netty.logging.InternalLoggerFactory;
/**
* The Class PatternRule represents an IP filter rule using string patterns.
* <br>
* Rule Syntax:
* <br>
* <pre>
* Rule ::= [n|i]:address n stands for computer name, i for ip address
* address ::= &lt;regex&gt; | localhost
* regex is a regular expression with '*' as multi character and '?' as single character wild card
* </pre>
* <br>
* Example: allow localhost:
* <br>
* new PatternRule(true, "n:localhost")
* <br>
* Example: allow local lan:
* <br>
* new PatternRule(true, "i:192.168.0.*")
* <br>
* Example: block all
* <br>
* new PatternRule(false, "n:*")
* <br>
*
* @author Ron
*/
public class PatternRule implements IpFilterRule, Comparable<Object>
{
private static final InternalLogger logger = InternalLoggerFactory.getInstance(PatternRule.class);
private Pattern ipPattern = null;
private Pattern namePattern = null;
private boolean isAllowRule = true;
private boolean localhost = false;
private String pattern = null;
/**
* Instantiates a new pattern rule.
*
* @param allow indicates if this is an allow or block rule
* @param pattern the filter pattern
*/
public PatternRule(boolean allow, String pattern)
{
this.isAllowRule = allow;
this.pattern = pattern;
parse(pattern);
}
/**
* returns the pattern.
*
* @return the pattern
*/
public String getPattern()
{
return this.pattern;
}
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.IpFilterRule#isAllowRule()
*/
public boolean isAllowRule()
{
return isAllowRule;
}
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.IpFilterRule#isDenyRule()
*/
public boolean isDenyRule()
{
return !isAllowRule;
}
/* (non-Javadoc)
* @see org.jboss.netty.handler.ipfilter.IpSet#contains(java.net.InetAddress)
*/
public boolean contains(InetAddress inetAddress)
{
if (localhost)
if (isLocalhost(inetAddress))
return true;
if (ipPattern != null)
if (ipPattern.matcher(inetAddress.getHostAddress()).matches())
return true;
if (namePattern != null)
if (namePattern.matcher(inetAddress.getHostName()).matches())
return true;
return false;
}
private void parse(String pattern)
{
if (pattern == null)
return;
String[] acls = pattern.split(",");
String ip = "";
String name = "";
for (String c : acls)
{
c = c.trim();
if (c.equals("n:localhost"))
this.localhost = true;
else if (c.startsWith("n:"))
name = addRule(name, c.substring(2));
else if (c.startsWith("i:"))
ip = addRule(ip, c.substring(2));
}
if (ip.length() != 0)
ipPattern = Pattern.compile(ip);
if (name.length() != 0)
namePattern = Pattern.compile(name);
}
private String addRule(String pattern, String rule)
{
if (rule == null || rule.length() == 0)
return pattern;
if (pattern.length() != 0)
pattern += "|";
rule = rule.replaceAll("\\.", "\\\\.");
rule = rule.replaceAll("\\*", ".*");
rule = rule.replaceAll("\\?", ".");
pattern += "(" + rule + ")";
return pattern;
}
private boolean isLocalhost(InetAddress address)
{
try
{
if (address.equals(InetAddress.getLocalHost()))
return true;
}
catch (UnknownHostException e)
{
logger.info("error getting ip of localhost", e);
}
try
{
InetAddress[] addrs = InetAddress.getAllByName("127.0.0.1");
for (InetAddress addr : addrs)
if (addr.equals(address))
return true;
}
catch (UnknownHostException e)
{
logger.info("error getting ip of localhost", e);
}
return false;
}
/* (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Object o)
{
if (o == null)
return -1;
if (!(o instanceof PatternRule))
return -1;
PatternRule p = (PatternRule) o;
if (p.isAllowRule() && !this.isAllowRule)
return -1;
if (this.pattern == null && p.pattern == null)
return 0;
if (this.pattern != null)
return this.pattern.compareTo(p.getPattern());
return -1;
}
}

View file

@ -0,0 +1,93 @@
/*
* Copyright 2009 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
/**
* Implementation of a Ip based Filter handlers.<br>
* <br><br>
*
*
* <P>The main goal of this package is to allow to filter connections based on IP rules.
* The main interface is <tt>{@link IpFilteringHandler}</tt> which all filters will extend.</P>
*
* <P>Two IP filtering are proposed:<br>
* <ul>
* <li> <tt>{@link OneIpFilterHandler}</tt>: This filter proposes to allow only one connection by client's IP Address.
* I.E. this filter will prevent two connections from the same client based on its IP address.</li><br><br>
*
* <li> <tt>{@link IpFilterRuleHandler}</tt>: This filter proposes to allow or block IP range (based on standard notation
* or on CIDR notation) when the connection is running. It relies on another class like
* <tt>IpV4SubnetFilterRule</tt> (IPV4 support only), <tt>IpSubnetFilterRule</tt> (IPV4 and IPV6 support) or <tt>PatternRule</tt> (string pattern support)
* which implements those Ip ranges.</li><br><br>
*
* </ul></P>
*
* <P>Standard use could be as follow: The accept method must be overridden (of course you can
* override others).</P>
*
* <P><ul>
* <li><tt>accept</tt> method allows to specify your way of choosing if a new connection is
* to be allowed or not.</li><br>
* In <tt>OneIpFilterHandler</tt> and <tt>IpFilterRuleHandler</tt>,
* this method is already implemented.<br>
* <br>
*
* <li><tt>handleRefusedChannel</tt> method is executed when the accept method filters (blocks, so returning false)
* the new connection. This method allows you to implement specific actions to be taken before the channel is
* closed. After this method is called, the channel is immediately closed.</li><br>
* So if you want to send back a message to the client, <b>don't forget to return a respectful ChannelFuture,
* otherwise the message could be missed since the channel will be closed immediately after this
* call and the waiting on this channelFuture</b> (at least with respect of asynchronous operations).<br><br>
* Per default implementation this method invokes an {@link IpFilterListener} or returns null if no listener has been set.
* <br><br>
*
* <li><tt>continues</tt> is called when any event appears after CONNECTED event and only for
* blocked channels.</li><br>
* It should return True if this new event has to go to next handlers
* in the pipeline if any, and False (default) if no events has to be passed to the next
* handlers when a channel is blocked. This is intend to prevent any unnecessary action since the connection is refused.<br>
* However, you could change its behavior for instance because you don't want that any event
* will be blocked by this filter by returning always true or according to some events.<br>
* <b>Note that OPENED and BOUND events are still passed to the next entry in the pipeline since
* those events come out before the CONNECTED event, so there is no possibility to filter those two events
* before the CONNECTED event shows up. Therefore, you might want to let CLOSED and UNBOUND be passed
* to the next entry in the pipeline.</b><br><br>
* Per default implementation this method invokes an {@link IpFilterListener} or returns false if no listener has been set.
* <br><br>
*
* <li>Finally <tt>handleUpstream</tt> traps the CONNECTED and DISCONNECTED events.</li><br>
* If in the CONNECTED events the channel is blocked (<tt>accept</tt> refused the channel),
* then any new events on this channel will be blocked.<br>
* However, you could change its behavior for instance because you don't want that all events
* will be blocked by this filter by testing the result of isBlocked, and if so,
* calling <tt>ctx.sendUpstream(e);</tt> after calling the super method or by changing the <tt>continues</tt> method.<br><br>
* </ul></P><br><br>
*
* A typical setup for ip filter for TCP/IP socket would be:
*
* <pre>
* {@link ChannelPipeline} pipeline = ...;
*
* IpFilterRuleHandler firewall = new IpFilterRuleHandler();
* firewall.addAll(new IpFilterRuleList("+n:localhost, +c:192.168.0.0/27, -n:*"));
* pipeline.addFirst(&quot;firewall&quot;, firewall);
* </pre>
*
* @apiviz.exclude ^java\.lang\.
*/
package org.jboss.netty.handler.ipfilter;

View file

@ -0,0 +1,38 @@
package org.rzo.netty.ahessian;
import org.jboss.netty.logging.InternalLogger;
import org.jboss.netty.logging.InternalLoggerFactory;
public interface Constants
{
public static final String HEADER_STRING = "H";
public static final Integer GROUP_HEADER_KEY = 0;
public static final Integer CALL_ID_HEADER_KEY = 1;
public static final Integer SERVICE_ID_HEADER_KEY = 2;
public static final Integer CALLBACK_ID_HEADER_KEY = 3;
public static final Integer CALLBACK_METHOD_HEADER_KEY = 4;
public static final Integer CALLBACK_ARGS_HEADER_KEY = 5;
public static final Integer CALLBACK_DONE_HEADER_KEY = 6;
public static final Integer COMPLETED_HEADER_KEY = 7;
public static final Integer HAS_SESSION_FILTER_HEADER_KEY = 8;
public static final int IGROUP_HEADER_KEY = 0;
public static final int ICALL_ID_HEADER_KEY = 1;
public static final int ISERVICE_ID_HEADER_KEY = 2;
public static final int ICALLBACK_ID_HEADER_KEY = 3;
public static final int ICALLBACK_METHOD_HEADER_KEY = 4;
public static final int ICALLBACK_ARGS_HEADER_KEY = 5;
public static final int ICALLBACK_DONE_HEADER_KEY = 6;
public static final int ICOMPLETED_HEADER_KEY = 7;
public static final int IHAS_SESSION_FILTER_HEADER_KEY = 8;
public static final InternalLogger ahessianLogger =
InternalLoggerFactory.getInstance("ahessian");
}

View file

@ -0,0 +1,36 @@
package org.rzo.netty.ahessian.application.file.remote.server;
import java.io.File;
import java.io.InputStream;
import java.util.List;
import org.rzo.netty.ahessian.application.file.remote.service.AsyncFileService;
import org.rzo.netty.ahessian.application.file.remote.service.FileObject;
public class AsyncFileServiceImpl implements AsyncFileService
{
public FileObject getFile(String file)
{
File f = new File(file);
if (!f.exists())
return null;
return toFileObject(f);
}
private FileObject toFileObject(File f)
{
return new FileObjectImpl(f);
}
public InputStream getInputStream(String file)
{
return null;
}
public List<FileObject> list(String filter)
{
return null;
}
}

View file

@ -0,0 +1,75 @@
package org.rzo.netty.ahessian.application.file.remote.server;
import java.io.File;
import java.io.InputStream;
import org.rzo.netty.ahessian.application.file.remote.service.AsyncFileService;
import org.rzo.netty.ahessian.application.file.remote.service.FileObject;
public class FileObjectImpl implements FileObject
{
long _created = -1;
String _path = null;
boolean _isDirectory = false;
boolean _isFile = false;
boolean _isHidden = false;
long _lastModified = -1;
long _length = -1;
transient AsyncFileService _fileService = null;
public FileObjectImpl(File file)
{
_path = file.getAbsolutePath();
_isDirectory = file.isDirectory();
_isFile = file.isFile();
_isHidden = file.isHidden();
_lastModified = file.lastModified();
_length = file.length();
}
public FileObjectImpl()
{
}
public long created()
{
return _created;
}
public InputStream getInputStream()
{
return _fileService.getInputStream(_path);
}
public String getPath()
{
return _path;
}
public boolean isDirectory()
{
return _isDirectory;
}
public boolean isFile()
{
return _isFile;
}
public boolean isHidden()
{
return _isHidden;
}
public long lastModified()
{
return _lastModified;
}
public long length()
{
return _length;
}
}

View file

@ -0,0 +1,32 @@
package org.rzo.netty.ahessian.application.file.remote.service;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
import javax.management.InvalidAttributeValueException;
import javax.management.ListenerNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanRegistration;
import javax.management.MBeanRegistrationException;
import javax.management.NotCompliantMBeanException;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.ObjectName;
import javax.management.QueryExp;
import javax.management.ReflectionException;
public interface AsyncFileService
{
public FileObject getFile(String file);
public List<FileObject> list(String filter);
public InputStream getInputStream(String file);
}

View file

@ -0,0 +1,15 @@
package org.rzo.netty.ahessian.application.file.remote.service;
import java.io.InputStream;
public interface FileObject
{
public String getPath();
public boolean isDirectory();
public boolean isFile();
public boolean isHidden();
public long lastModified();
public long created();
public long length();
public InputStream getInputStream();
}

View file

@ -0,0 +1,111 @@
package org.rzo.netty.ahessian.application.jmx.remote.client;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
import org.rzo.netty.ahessian.application.jmx.remote.service.AsyncMBeanServerConnection;
import org.rzo.netty.ahessian.application.jmx.remote.service.MBeanServerConnectionAsyncAdapter;
import org.rzo.netty.ahessian.rpc.client.HessianProxyFactory;
public class Client
{
static boolean stop = false;
static MBeanServerConnection server;
public static void main(String[] args) throws Exception
{
final ExecutorService executor = Executors.newCachedThreadPool();
// Configure the client.
ClientBootstrap bootstrap = new ClientBootstrap(
new NioClientSocketChannelFactory(
executor,
executor));
bootstrap.setOption(
"remoteAddress", new InetSocketAddress("localhost", 8080));
bootstrap.setOption("reuseAddress", true);
final HessianProxyFactory factory = new HessianProxyFactory(executor, "localhost:8080");
bootstrap.setPipelineFactory(
new RPCClientSessionPipelineFactory(new RPCClientMixinPipelineFactory(executor, factory), bootstrap));
factory.setDisconnectedListener(new Runnable()
{
public void run()
{
//stop = true;
}
});
factory.setNewSessionListener(new Runnable()
{
public void run()
{
stop = false;
executor.execute(new Runnable()
{
public void run()
{
System.out.println("started work thread");
Map options = new HashMap();
options.put("sync", true);
options.put("timeout", (long)10000);
AsyncMBeanServerConnection service = (AsyncMBeanServerConnection) factory.create(AsyncMBeanServerConnection.class, Client.class.getClassLoader(), options);
server = new MBeanServerConnectionAsyncAdapter(service);
while (!stop)
{
try
{
ObjectName on = new ObjectName("java.lang:type=ClassLoading");
Object x = server.getAttribute(on, "LoadedClassCount");
System.out.println(x);
}
catch(Exception ex)
{
ex.printStackTrace();
System.out.println(ex);
}
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println("stopped work thread");
}
});
}
});
// Start the connection attempt.
ChannelFuture future = bootstrap.connect(new InetSocketAddress("localhost", 8080));
// Wait until the connection attempt succeeds or fails.
Channel channel = future.awaitUninterruptibly().getChannel();
if (future.isSuccess())
System.out.println("connected");
// get a proxy
}
}

View file

@ -0,0 +1,55 @@
package org.rzo.netty.ahessian.application.jmx.remote.client;
import java.util.concurrent.Executor;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.rzo.netty.ahessian.application.jmx.remote.service.JmxSerializerFactory;
import org.rzo.netty.ahessian.io.InputStreamDecoder;
import org.rzo.netty.ahessian.io.OutputStreamEncoder;
import org.rzo.netty.ahessian.io.PullInputStreamConsumer;
import org.rzo.netty.ahessian.rpc.client.HessianProxyFactory;
import org.rzo.netty.ahessian.rpc.message.HessianRPCCallEncoder;
import org.rzo.netty.ahessian.rpc.message.HessianRPCReplyDecoder;
import org.rzo.netty.ahessian.rpc.message.OutputProducer;
import org.rzo.netty.ahessian.session.MixinPipeline;
import com.caucho.hessian4.io.SerializerFactory;
public class RPCClientMixinPipelineFactory implements ChannelPipelineFactory
{
Executor _executor;
HessianProxyFactory _factory;
SerializerFactory _serializerFactory = new JmxSerializerFactory();
RPCClientMixinPipelineFactory(Executor executor, HessianProxyFactory factory)
{
_executor = executor;
_factory = factory;
}
public ChannelPipeline getPipeline() throws Exception
{
ChannelPipeline pipeline = new MixinPipeline();
// InputStreamDecoder returns an input stream and calls the next handler in a separate thread
pipeline.addLast("inputStream", new InputStreamDecoder());
//pipeline.addLast("logger2",new OutLogger1("2"));
pipeline.addLast("outputStream", new OutputStreamEncoder());
pipeline.addLast("hessianReplyDecoder", new PullInputStreamConsumer(new HessianRPCReplyDecoder(_factory, _serializerFactory), _executor));
pipeline.addLast("hessianCallEncoder", new HessianRPCCallEncoder(_serializerFactory));
pipeline.addLast("outputProducer", new OutputProducer(_executor));
//pipeline.addLast("logger3",new OutLogger("3"));
pipeline.addLast("hessianHandler", _factory);
return pipeline;
}
}

View file

@ -0,0 +1,92 @@
package org.rzo.netty.ahessian.application.jmx.remote.client;
import static org.jboss.netty.channel.Channels.pipeline;
import java.net.ConnectException;
import java.util.Timer;
import java.util.TimerTask;
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.rzo.netty.ahessian.log.OutLogger;
import org.rzo.netty.ahessian.session.ClientSessionFilter;
public class RPCClientSessionPipelineFactory implements ChannelPipelineFactory
{
ChannelPipelineFactory _mixinFactory;
ClientSessionFilter _sessionFilter;
private static Timer timer = new Timer();
private static long RECONNECT_DELAY = 5000;
ClientBootstrap _bootstrap;
RPCClientSessionPipelineFactory(ChannelPipelineFactory mixinFactory, ClientBootstrap bootstrap)
{
_mixinFactory = mixinFactory;
_sessionFilter = new ClientSessionFilter(_mixinFactory);
_bootstrap = bootstrap;
}
public ChannelPipeline getPipeline() throws Exception
{
ChannelPipeline pipeline = pipeline(); // Note the static import.
pipeline.addLast("logger",new OutLogger("1"));
pipeline.addLast("reconnector", new SimpleChannelUpstreamHandler()
{
@Override
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) {
ctx.sendUpstream(e);
System.out.println("channel closed wait to reconnect ...");
timer.schedule(new TimerTask() {
public void run() {
System.out.println("reconnecting...");
ChannelFuture f = _bootstrap.connect();
try
{
System.out.println("future wait");
f.awaitUninterruptibly();
System.out.println("future wait terminated");
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if (f.isSuccess())
System.out.println("connected");
else
{
System.out.println("not connected");
// f.getChannel().close();
}
}
}, RECONNECT_DELAY);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
Throwable cause = e.getCause();
if (cause instanceof ConnectException)
{
System.out.println("conection lost");
}
ctx.getChannel().close();
}
}
);
pipeline.addLast("sessionFilter", _sessionFilter);
return pipeline;
}
}

View file

@ -0,0 +1,63 @@
package org.rzo.netty.ahessian.application.jmx.remote.server;
import java.util.ArrayList;
import java.util.concurrent.Executor;
import javax.management.MBeanServer;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerFactory;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.rzo.netty.ahessian.application.jmx.remote.service.JmxSerializerFactory;
import org.rzo.netty.ahessian.io.InputStreamDecoder;
import org.rzo.netty.ahessian.io.OutputStreamEncoder;
import org.rzo.netty.ahessian.io.PullInputStreamConsumer;
import org.rzo.netty.ahessian.rpc.message.HessianRPCCallDecoder;
import org.rzo.netty.ahessian.rpc.message.HessianRPCReplyEncoder;
import org.rzo.netty.ahessian.rpc.message.OutputProducer;
import org.rzo.netty.ahessian.rpc.server.HessianRPCServiceHandler;
import org.rzo.netty.ahessian.rpc.server.ImmediateInvokeService;
import org.rzo.netty.ahessian.session.MixinPipeline;
import com.caucho.hessian4.io.SerializerFactory;
public class RPCServerMixinPipelineFactory implements ChannelPipelineFactory
{
Executor _executor;
SerializerFactory _serializerFactory = new JmxSerializerFactory();
RPCServerMixinPipelineFactory(Executor executor)
{
_executor = executor;
}
public ChannelPipeline getPipeline() throws Exception
{
ChannelPipeline pipeline = new MixinPipeline();
pipeline.addLast("inputStream", new InputStreamDecoder());
//pipeline.addLast("logger2",new OutLogger("2"));
pipeline.addLast("outputStream", new OutputStreamEncoder());
pipeline.addLast("callDecoder", new PullInputStreamConsumer(new HessianRPCCallDecoder(_serializerFactory), _executor ));
pipeline.addLast("replyEncoder", new HessianRPCReplyEncoder(_serializerFactory));
pipeline.addLast("outputProducer", new OutputProducer(_executor));
//pipeline.addLast("logger3",new OutLogger("3"));
HessianRPCServiceHandler factory = new HessianRPCServiceHandler(_executor);
ArrayList servers = MBeanServerFactory.findMBeanServer(null);
MBeanServer server = null;
if (servers != null && servers.size() > 0)
server = (MBeanServer) servers.get(0);
if (server == null)
server = MBeanServerFactory.createMBeanServer();
//factory.addService("default", new ContinuationService(new ContinuationHalloWorldService(), HelloWorldServiceInterface.class, factory, _executor));
factory.addService("default", new ImmediateInvokeService(server, MBeanServerConnection.class, factory));
pipeline.addLast("hessianRPCServer", factory);
//bootstrap.getPipeline().addLast("logger4",new OutLogger("4"));
return pipeline;
}
}

View file

@ -0,0 +1,28 @@
package org.rzo.netty.ahessian.application.jmx.remote.server;
import static org.jboss.netty.channel.Channels.pipeline;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.rzo.netty.ahessian.log.OutLogger;
import org.rzo.netty.ahessian.session.ServerSessionFilter;
public class RPCServerSessionPipelineFactory implements ChannelPipelineFactory
{
ChannelPipelineFactory _mixinFactory;
RPCServerSessionPipelineFactory(ChannelPipelineFactory mixinFactory)
{
_mixinFactory = mixinFactory;
}
public ChannelPipeline getPipeline() throws Exception
{
ChannelPipeline pipeline = pipeline(); // Note the static import.
pipeline.addLast("logger",new OutLogger("1"));
pipeline.addLast("sessionFilter", new ServerSessionFilter(_mixinFactory));
return pipeline;
}
}

View file

@ -0,0 +1,30 @@
package org.rzo.netty.ahessian.application.jmx.remote.server;
import java.net.InetSocketAddress;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
public class Server
{
public static void main(String[] args)
{
Executor executor = Executors.newFixedThreadPool(200);
// Configure the server.
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
executor,
executor));
bootstrap.setPipelineFactory(
new RPCServerSessionPipelineFactory( new RPCServerMixinPipelineFactory(executor)));
// Bind and start to accept incoming connections.
bootstrap.bind(new InetSocketAddress(8080));
}
}

View file

@ -0,0 +1,378 @@
package org.rzo.netty.ahessian.application.jmx.remote.service;
import java.io.IOException;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
import javax.management.InvalidAttributeValueException;
import javax.management.ListenerNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanRegistration;
import javax.management.MBeanRegistrationException;
import javax.management.NotCompliantMBeanException;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.ObjectName;
import javax.management.QueryExp;
import javax.management.ReflectionException;
public interface AsyncMBeanServerConnection
{
/**
* Adds a NotificationListener to a registered MBean.
* A notification emitted by the specified source MBean will be forwarded by the MBeanServer to the given listener,
* if the given NotificationFilter allows so. If the filter is null, every notification will be sent to the
* listener.
* The handback object is transparently passed to the listener by the MBeanServer.
* The source of the notification is the source MBean ObjectName.
*
* @param observed The ObjectName of the source MBean on which the listener should be added.
* @param listener The listener which will handle the notifications emitted by the source MBean.
* @param filter The filter which will allow the notification to be forwarded to the listener.
* @param handback The context to be sent to the listener when a notification is emitted.
* @throws InstanceNotFoundException If the source MBean is not registered in the MBeanServer.
* @throws IOException If a communication problem occurred.
* @see #removeNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
*/
public Object addNotificationListener(ObjectName observed, NotificationListener listener, NotificationFilter filter, Object handback)
throws InstanceNotFoundException, IOException;
/**
* Adds a NotificationListener to a registered MBean.
* A notification emitted by the specified source MBean will be forwarded by the MBeanServer to the given listener MBean,
* if the given NotificationFilter allows so. If the filter is null, every notification will be sent to the
* listener.
* The handback object is transparently passed to the listener by the MBeanServer.
* The source of the notification is the source MBean ObjectName.
* If the listener MBean is unregistered, it will continue to receive notifications.
*
* @param observed The ObjectName of the source MBean on which the listener should be added.
* @param listener The ObjectName of the listener MBean which will handle the notifications emitted by the source MBean.
* @param filter The filter which will allow the notification to be forwarded to the listener.
* @param handback The context to be sent to the listener when a notification is emitted.
* @throws InstanceNotFoundException If the source or listener MBean are not registered in the MBeanServer.
* @throws IOException If a communication problem occurred.
* @see #removeNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)
*/
public Object addNotificationListener(ObjectName observed, ObjectName listener, NotificationFilter filter, Object handback)
throws InstanceNotFoundException, IOException;
/**
* Removes the specified listener from the named source MBean.
* If the listener is registered more than once, for example with different filters or handbacks,
* this method will remove all those registrations.
*
* @param observed The ObjectName of the source MBean on which the listener should be removed.
* @param listener The listener to be removed.
* @throws InstanceNotFoundException If the source MBean is not registered in the MBeanServer.
* @throws ListenerNotFoundException If the listener is not registered in the MBean.
* @throws IOException If a communication problem occurred.
* @see #addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
*/
public Object removeNotificationListener(ObjectName observed, NotificationListener listener)
throws InstanceNotFoundException, ListenerNotFoundException, IOException;
/**
* Removes the specified listener MBean from the named source MBean.
* If the listener is registered more than once, for example with different filters or handbacks,
* this method will remove all those registrations.
*
* @param observed The ObjectName of the source MBean on which the listener should be removed.
* @param listener The ObjectName of the listener MBean to be removed.
* @throws InstanceNotFoundException If the source or listener MBean are not registered in the MBeanServer.
* @throws ListenerNotFoundException The listener is not registered in the MBean.
* @throws IOException If a communication problem occurred.
* @see #addNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)
*/
public Object removeNotificationListener(ObjectName observed, ObjectName listener)
throws InstanceNotFoundException, ListenerNotFoundException, IOException;
/**
* Removes the specified listener from the named source MBean.
* The MBean must have a listener that exactly matches the given listener, filter, and handback parameters.
*
* @param observed The ObjectName of the source MBean on which the listener should be removed.
* @param listener The listener to be removed.
* @param filter The filter that was specified when the listener was added.
* @param handback The handback that was specified when the listener was added.
* @throws InstanceNotFoundException If the source MBean is not registered in the MBeanServer.
* @throws ListenerNotFoundException If the listener (along with filter and handback) is not registered in the MBean.
* @throws IOException If a communication problem occurred.
* @see #addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
* @since JMX 1.2
*/
public Object removeNotificationListener(ObjectName observed, NotificationListener listener, NotificationFilter filter, Object handback)
throws InstanceNotFoundException, ListenerNotFoundException, IOException;
/**
* Removes the specified listener MBean from the named source MBean.
* The MBean must have a listener that exactly matches the given listener, filter, and handback parameters.
*
* @param observed The ObjectName of the source MBean on which the listener should be removed.
* @param listener The ObjectName of the listener MBean to be removed.
* @param filter The filter that was specified when the listener was added.
* @param handback The handback that was specified when the listener was added.
* @throws InstanceNotFoundException If the source MBean is not registered in the MBeanServer.
* @throws ListenerNotFoundException If the listener (along with filter and handback) is not registered in the MBean.
* @throws IOException If a communication problem occurred.
* @see #addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
* @since JMX 1.2
*/
public Object removeNotificationListener(ObjectName observed, ObjectName listener, NotificationFilter filter, Object handback)
throws InstanceNotFoundException, ListenerNotFoundException, IOException;
/**
* Returns the metadata information exposed for management about the named MBean.
*
* @param objectName The name of the MBean for which retrieve the metadata.
* @return An instance of MBeanInfo allowing the retrieval of constructors, attributes, operations and notifications of this MBean.
* @throws IntrospectionException If an exception occured during introspection of the MBean.
* @throws InstanceNotFoundException If the named MBean is not registered in the MBeanServer.
* @throws ReflectionException If a reflection-type exception occurred
* @throws IOException If a communication problem occurred.
*/
public Object getMBeanInfo(ObjectName objectName)
throws InstanceNotFoundException, IntrospectionException, ReflectionException, IOException;
/**
* Returns whether the MBean specified is an instance of the specified class.
*
* @param objectName The ObjectName of the MBean.
* @param className The name of the class.
* @return True if the MBean specified is an instance of the specified class.
* @throws InstanceNotFoundException If the named MBean is not registered in the MBeanServer.
* @throws IOException If a communication problem occurred.
*/
public Object isInstanceOf(ObjectName objectName, String className)
throws InstanceNotFoundException, IOException;
/**
* Returns the list of different ObjectName domains under which the MBeans in this MBeanServer are registered.
*
* @return The array of different ObjectName domains present in this MBeanServer.
* @throws IOException If a communication problem occurred.
* @since JMX 1.2
*/
public Object getDomains()
throws IOException;
/**
* Returns the default domain for this MBeanServer used in case ObjectName domain are not specified.
*
* @return The default domain of this MBeanServer.
* @throws IOException If a communication problem occurred.
*/
public Object getDefaultDomain()
throws IOException;
/**
* A facility method for <code>createMBean(className, objectName, null, null)</code>.
*
* @see #createMBean(String, ObjectName, Object[], String[])
*/
public Object createMBean(String className, ObjectName objectName)
throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, IOException;
/**
* Instantiates and registers an MBean of the specified class with the given ObjectName in the MBeanServer.
* The MBeanServer will use its ClassLoaderRepository to load the class of the MBean and the specified
* constructor's parameter classes, and creates the instance passing the specified arguments.
* The ObjectName may be null if the MBean implements {@link MBeanRegistration}
*
* @param className The class name of the MBean to be instantiated.
* @param objectName The ObjectName of the MBean, may be null.
* @param args An array containing the arguments to pass to the constructor.
* @param parameters An array containing the signature of the constructor.
* @return An ObjectInstance, containing the ObjectName and the Java class name of the newly instantiated MBean.
* @throws ReflectionException If a reflection exception is thrown.
* @throws InstanceAlreadyExistsException If another MBean with the same ObjectName is already registered in the MBeanServer.
* @throws MBeanRegistrationException If an exception is thrown during MBean's registration.
* @throws MBeanException If the constructor of the MBean has thrown an exception
* @throws NotCompliantMBeanException If the MBean is not a JMX compliant MBean
* @throws IOException If a communication problem occurred.
*/
public Object createMBean(String className, ObjectName objectName, Object[] args, String[] parameters)
throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, IOException;
/**
* A facility method for <code>createMBean(className, objectName, loaderName, null, null)</code>.
*
* @see #createMBean(String, ObjectName, ObjectName, Object[], String[])
*/
public Object createMBean(String className, ObjectName objectName, ObjectName loaderName)
throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException, IOException;
/**
* Instantiates and registers an MBean of the specified class with the given ObjectName in the MBeanServer.
* The MBeanServer will use the specified classloader MBean to load the class of the MBean and the specified
* constructor's parameter classes, and creates the instance passing the specified arguments, or the classloader
* of the MBeanServer if the classloader ObjectName is null.
* The ObjectName may be null if the MBean implements {@link MBeanRegistration}
*
* @param className The class name of the MBean to be instantiated.
* @param objectName The ObjectName of the MBean, may be null.
* @param loaderName The ObjectName of the classloader MBean to be used.
* @param args An array containing the arguments to pass to the constructor.
* @param parameters An array containing the signature of the constructor.
* @return An ObjectInstance, containing the ObjectName and the Java class name of the newly instantiated MBean.
* @throws ReflectionException If a reflection exception is thrown.
* @throws InstanceAlreadyExistsException If another MBean with the same ObjectName is already registered in the MBeanServer.
* @throws MBeanRegistrationException If an exception is thrown during MBean's registration.
* @throws MBeanException If the constructor of the MBean has thrown an exception
* @throws NotCompliantMBeanException If the MBean is not a JMX compliant MBean
* @throws InstanceNotFoundException If the specified classloader MBean is not registered in the MBeanServer.
* @throws IOException If a communication problem occurred.
*/
public Object createMBean(String className, ObjectName objectName, ObjectName loaderName, Object[] args, String[] parameters)
throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException, IOException;
/**
* Unregisters the MBean with the specified ObjectName from this MBeanServer.
*
* @param objectName The ObjectName of the MBean to be unregistered.
* @throws InstanceNotFoundException If the specified MBean is not registered in the MBeanServer.
* @throws MBeanRegistrationException If an exception is thrown during MBean's unregistration.
* @throws IOException If a communication problem occurred.
*/
public Object unregisterMBean(ObjectName objectName)
throws InstanceNotFoundException, MBeanRegistrationException, IOException;
/**
* Gets the value of the specified attribute of the named MBean.
*
* @param objectName The ObjectName of the MBean from which the attribute is to be retrieved.
* @param attribute The attribute name.
* @return The value of the specified attribute.
* @throws AttributeNotFoundException If the specified attribute does not belong to the management interface of the MBean.
* @throws MBeanException If the MBean's getter method throws an exception.
* @throws InstanceNotFoundException If the specified MBean is not registered in the MBeanServer.
* @throws ReflectionException If a reflection exception is thrown.
* @throws IOException If a communication problem occurred.
* @see #setAttribute
*/
public Object getAttribute(ObjectName objectName, String attribute)
throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException, IOException;
/**
* Sets the value of the specified attribute of the named MBean.
*
* @param objectName The name of the MBean within which the attribute is to be set.
* @param attribute The Attribute to be set.
* @throws InstanceNotFoundException If the specified MBean is not registered in the MBeanServer.
* @throws AttributeNotFoundException If the specified attribute does not belong to the management interface of the MBean.
* @throws InvalidAttributeValueException If the value specified for the attribute does not match the attribute's type
* @throws MBeanException If the MBean's setter method throws an exception.
* @throws ReflectionException If a reflection exception is thrown.
* @throws IOException If a communication problem occurred.
* @see #getAttribute
*/
public Object setAttribute(ObjectName objectName, Attribute attribute)
throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException, IOException;
/**
* Gets the values of several attributes of the named MBean.
*
* @param objectName The ObjectName of the MBean from which the attributes are to be retrieved.
* @param attributes The attribute names.
* @return An AttributeList containing the values of the attributes that it has been possible to retrieve.
* @throws InstanceNotFoundException If the specified MBean is not registered in the MBeanServer.
* @throws ReflectionException If a reflection exception is thrown.
* @throws IOException If a communication problem occurred.
* @see #setAttributes
*/
public Object getAttributes(ObjectName objectName, String[] attributes)
throws InstanceNotFoundException, ReflectionException, IOException;
/**
* Sets the values of several attributes of the named MBean.
*
* @param objectName The name of the MBean within which the attribute is to be set.
* @param attributes The AttributeList containing the Attributes to be set.
* @return The AttributeList containing the attributes that it has been possible to set.
* @throws InstanceNotFoundException If the specified MBean is not registered in the MBeanServer.
* @throws ReflectionException If a reflection exception is thrown.
* @throws IOException If a communication problem occurred.
* @see #getAttributes
*/
public Object setAttributes(ObjectName objectName, AttributeList attributes)
throws InstanceNotFoundException, ReflectionException, IOException;
/**
* Invokes the specified operation on the named MBean.
*
* @param objectName The ObjectName of the MBean on which the method is to be invoked.
* @param methodName The name of the operation to be invoked.
* @param args An array containing the arguments to pass to the operation.
* @param parameters An array containing the signature of the operation.
* @return The return value of the operation, or null if the operation returns void.
* @throws InstanceNotFoundException If the specified MBean is not registered in the MBeanServer.
* @throws MBeanException If the MBean's operation method throws an exception.
* @throws ReflectionException If a reflection exception is thrown.
* @throws IOException If a communication problem occurred.
*/
public Object invoke(ObjectName objectName, String methodName, Object[] args, String[] parameters)
throws InstanceNotFoundException, MBeanException, ReflectionException, IOException;
/**
* Returns the number of MBeans registered in this MBeanServer.
*
* @throws IOException If a communication problem occurred.
*/
public Object getMBeanCount()
throws IOException;
/**
* Checks whether the given ObjectName identifies an MBean registered in this MBeanServer.
*
* @param objectName The ObjectName to be checked.
* @return True if an MBean with the specified ObjectName is already registered in the MBeanServer.
* @throws IOException If a communication problem occurred.
*/
public Object isRegistered(ObjectName objectName)
throws IOException;
/**
* Gets the ObjectInstance for the named MBean registered with the MBeanServer.
*
* @param objectName The ObjectName of the MBean.
* @return The ObjectInstance associated with the named MBean.
* @throws InstanceNotFoundException If the specified MBean is not registered in the MBeanServer.
* @throws IOException If a communication problem occurred.
*/
public Object getObjectInstance(ObjectName objectName)
throws InstanceNotFoundException, IOException;
/**
* Gets a subset of the ObjectInstances belonging to MBeans registered in this MBeanServer.
* It is possible to filter the set of MBeans by specifying a pattern for MBean's ObjectNames, and a query expression
* to be evaluated to further filter the set of MBeans.
* The set can be further restricted if any exception is thrown during retrieval of MBean (for example for
* security reasons): the failing MBean will not be included.
*
* @param patternName The ObjectName pattern identifying the MBeans to be retrieved, or null to retrieve all MBeans.
* @param filter The query expression to be evaluated for selecting MBeans, or null.
* @return A set containing the ObjectInstance objects for the selected MBeans.
* @throws IOException If a communication problem occurred.
*/
public Object queryMBeans(ObjectName patternName, QueryExp filter)
throws IOException;
/**
* Gets a subset of the ObjectNames belonging to MBeans registered in this MBeanServer.
* It is possible to filter the set of MBeans by specifying a pattern for MBean's ObjectNames, and a query expression
* to be evaluated to further filter the set of MBeans.
* The set can be further restricted if any exception is thrown during retrieval of MBean (for example for
* security reasons): the failing MBean will not be included.
*
* @param patternName The ObjectName pattern identifying the MBeans to be retrieved, or null to retrieve all MBeans.
* @param filter The query expression to be evaluated for selecting MBeans, or null.
* @return A set containing the ObjectNames for the selected MBeans.
* @throws IOException If a communication problem occurred.
*/
public Object queryNames(ObjectName patternName, QueryExp filter)
throws IOException;
}

Some files were not shown because too many files have changed in this diff Show more