Whether you are a confirmed or beginner programmer, the Jset server is the framework offering the most advanced features for web based developments, and is at the same time the easiest to use. As a standalone server, it can be used with any client side technology. When used with its one-of-a-kind Jset client, it is the only solution capable of providing automated real-time for SQL databases on http protocol.

Fully functionnal file server
  • serves on http and https protocols
  • multiple ports support
  • multiple hosts support
  • multiple mime types support
  • streaming of processed and non processed files
Fully functionnal application server

  • session management
    • cookie
    • dynamic virtual directory

  • different variable types
    • global
    • cookie
    • post
    • session
    • url

  • native libraries ()
  • streaming of processed and non processed files
  • Server side real-time database result sets caching.
  • Databases joins amongst different database engines.
  • Database updates automatically pushed in real-time to Jset client
  • Different connection strategies depding on connection limitations.
  • File. library to load or create/update/move/delete folders and files
  • dir() method to browse folders and files
  • stream() method to stream files

The JAVA XML license is required to run the Jset server as a Microsoft service.
It is not required to launch the server, but is needed to launch it

  • in debug mode (jset /c)
  • with CACHE AUTO_PURGE="1" (auto detection of changed files).
  • with Jset Microsoft libraries (Active directories, authentication, rights, ...and more).
It is not needed by other operating systems.

<JAVA 
	JVM_PATH="C:/..."
	START_MEMORY="512" 
	CLASS_PATH="
		.;socgen/apipayment.jar;
		fedex/axis.jar;fedex/axis-ant.jar;
		fedex/commons-discovery-0.2.jar;fedex/commons-logging-1.0.4.jar;
		fedex/jaxrpc.jar;
		fedex/log4j-1.2.8.jar;
		fedex/saaj.jar;
		fedex/wsdl4j-1.5.1.jar;
		fedex/fedex.jar"
/>

Make sure server/config.xml declares all ports used by its hosts.
Also make sure your computer is not using services that are already using the ports you are specifying.

<LISTENER PORT="80" HANDLERS="20"/>
<LISTENER PORT="443" HANDLERS="20"/>

Mime types.

<CONTENT DEF="text/plain">
	<TYPE EXT="xml,app" NAME="application/xml" PROCESSOR_NAME="def"/>
	<TYPE EXT="lib,hdr,ftr,jset,htm,html" NAME="text/html" PROCESSOR_NAME="def"/>
	<TYPE EXT="css" NAME="text/css" PROCESSOR_NAME="def"/>
	<TYPE EXT="js" NAME="application/javascript" PROCESSOR_NAME="def"/>
	<TYPE EXT="mdb" NAME="application/x-msaccess" CACHE="0"/>
	<TYPE EXT="pdf" NAME="application/pdf"/>
	<TYPE EXT="rtf" NAME="application/rtf"/>
	<TYPE EXT="doc" NAME="application/msword"/>
	<TYPE EXT="xls" NAME="application/vnd.ms-excel"/>
	<TYPE EXT="gif" NAME="image/gif"/>
	<TYPE EXT="jpg,jpeg,jpe" NAME="image/jpeg"/>
	<TYPE EXT="png" NAME="image/png"/>
</CONTENT>

<!-- DEFAULT is not mandatory, but must use all server ports if used-->
<HOST NAME="DEFAULT" CONFIG="C:/Jset/hosts/www.domain.com.cfg"/>

<HOST NAME="localhost" CONFIG="C:/Jset/hosts/www.mini.com.cfg"/>
<HOST NAME="127.0.0.1" CONFIG="C:/Jset/hosts/www.maxi.com.cfg"/>
<HOST NAME="www.domain.com" CONFIG="C:/Jset/hosts/domain/www.domain.com.cfg"/>

<JAVA/>
<SERVER>
	<LISTENER PORT="80" HANDLERS="20"/>
	<LISTENER PORT="443" HANDLERS="20"/>
	<CONTENT DEF="text/plain">
		<TYPE EXT="xml,app" NAME="application/xml" PROCESSOR_NAME="def"/>
		<TYPE EXT="lib,hdr,ftr,jset,htm,html" NAME="text/html" PROCESSOR_NAME="def"/>
		<TYPE EXT="css" NAME="text/css" PROCESSOR_NAME="def"/>
		<TYPE EXT="js" NAME="application/javascript" PROCESSOR_NAME="def"/>
		<TYPE EXT="mdb" NAME="application/x-msaccess" CACHE="0"/>
		<TYPE EXT="pdf" NAME="application/pdf"/>
		<TYPE EXT="rtf" NAME="application/rtf"/>
		<TYPE EXT="doc" NAME="application/msword"/>
		<TYPE EXT="xls" NAME="application/vnd.ms-excel"/>
		<TYPE EXT="gif" NAME="image/gif"/>
		<TYPE EXT="jpg,jpeg,jpe" NAME="image/jpeg"/>
		<TYPE EXT="png" NAME="image/png"/>
	</CONTENT>
	<HOST NAME="localhost" CONFIG="C:/Jset/hosts/www.mini.com.cfg"/>
	<HOST NAME="127.0.0.1" CONFIG="C:/Jset/hosts/www.maxi.com.cfg"/>
	<HOST NAME="www.domain.com" CONFIG="C:/Jset/hosts/domain/www.domain.com.cfg"/>
</SERVER>

File server configuration

<HOST CLASS_PATH="" JAR_PATH="">
	<ACCEPT PORT="80"/>
	<MAPPING PATH="C:/JsetProject/ProjectName/web/www.comain.com" DEF="index.htm"/>
</HOST>

With client configuration

<HOST CLASS_PATH="" JAR_PATH="">
	<ACCEPT PORT="80"/>
	<MAPPING PATH="C:/JsetProject/ProjectNam/web/www.project.com" DEF="index.htm">		
		
		<VIRTUAL>
			<!-- required for the Jset client data file components (combo, tree, grid, panel) -->
			<SERVICE NAME="FolderBrowser" CLASS="jset.server.http.data.folder.JsFolderService"/>
			<!-- required for client side exports -->
			<SERVICE NAME="Upload" CLASS="jset.server.http.service.file.JsFileUploadService"/>
		</VIRTUAL>
		
		<!-- required for Jset client invoking server services -->
		<FILTER CLASS="jset.server.http.service.JsClientServerFilter"/>
		
		<!-- client server real-time modes, not needed if you are not using the Jset client -->
		<!-- to disable one or 2 modes, just remove the XML node(s) -->
		<FILTER CLASS="jset.server.http.realtime.JsRealtimeFilter">

			<!-- real-time, 2 sockets (incoming and outgoing), requires http 1.1 client side -->
			<!-- will be initated if tunnel not specified or failed to function properly -->
			<!-- can be blocked by client side antivirus software (network traffic monitoring) -->
			<!-- recommended for intranets and extranets -->
			<CONNECTOR CLASS="jset.server.http.realtime.media.JsTunnelMedia"/>
			
			<!-- real-time, same socket for incoming and outgoing data, recommended on the internet -->
			<!-- will be initated when tunnel is not specified or failed to function properly -->
			<CONNECTOR CLASS="jset.server.http.realtime.media.JsHttpMedia"/>			
			
			<!-- smart pull (when sockets cannot be persistent) -->
			<!-- initated if tunnel & media not specified or failed to function properly -->
			<!-- performs regular updates depending on updates frequency (based on our algorithm) -->
			<CONNECTOR CLASS="jset.server.http.realtime.media.JsPullMedia"/>
		
		</FILTER>
	</MAPPING>
</HOST>

<!-- 
Leave JAR_PATH empty if you are not using a JDBC database driver.
Current JAR_PATH loads SQL Server and mySQL jdbc drivers.
MS Access databases not declared in here, so can be left empty if you are only using MS Access.
-->
<HOST CLASS_PATH="" JAR_PATH="C:/JsetProject/_sqlDriver/Microsoft/sqlServerExpress,C:/JsetProject/_sqlDriver/Oracle">

	<!-- host ports, will run host on all of these ports as a single host instance -->
	<ACCEPT PORT="80"/>
	<ACCEPT PORT="443"/>

	<!-- server log files -->
	<CONSOLE PATH="C:/JsetProject/ProjectName/logServer"/>

	<!-- remove node to disable sessions -->
	<SESSION/>
	<!-- or
	<SESSION MAINTAIN_EXPIRED="" EXPIRED_REDIRECT=""/>
	 -->

	<!-- host mime types, will override server/config.xml default mime types for all hosts -->
	<!-- DEF is default mime type if file extention is not declared here-->
	<CONTENT DEF="text/plain">

		<!-- these mime types will be processed by the Jset server -->
		<TYPE EXT="app,xml" NAME="application/xml" PROCESSOR_NAME="def"/>
		<TYPE EXT="htm,html,hdr,ftr,jset,lib,ovl" NAME="text/html" PROCESSOR_NAME="def"/>
		<TYPE EXT="css" NAME="text/css" PROCESSOR_NAME="def"/>
		<TYPE EXT="js" NAME="application/javascript" PROCESSOR_NAME="def"/>
		<TYPE EXT="txt" NAME="text/plain" PROCESSOR_NAME="def"/>
		<TYPE EXT="rtf" NAME="application/rtf"/>
		
		<!-- these ones will NOT be processed by the Jset server -->
		<TYPE EXT="gif" NAME="image/gif"/>
		<TYPE EXT="jpg,jpeg,jpe" NAME="image/jpeg"/>
		<TYPE EXT="png" NAME="image/png"/>
		<TYPE EXT="doc" NAME="application/msword"/>
		<TYPE EXT="pdf" NAME="application/pdf"/>
		<TYPE EXT="xls" NAME="application/vnd.ms-excel"/>
		<TYPE EXT="csv" NAME="text/plain"/>
		<TYPE EXT="docx" NAME="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>

		<!-- This one will not be processed, and will not be CACHED, even when CACHE is on -->
		<TYPE EXT="mdb" NAME="application/msaccess" CACHE="0"/>
		<!-- You may do not want to detect changes as they occur very often (everytime data changes is the database file) -->

	</CONTENT>

	<!-- domain root path, with default folder file name/ext -->
	<MAPPING PATH="C:/JsetProject/_root" DEF="index.jset">

		<!-- remove node to disable cache -->
		<CACHE/>
		<!-- or
		<CACHE AUTO_PURGE="1"/>
		AUTO_PURGE can be used on MS Windows computers with a Jset server license.
		It will only work on MS WIndows computer running the Jset server, when running as a service or in debug (jset /c) mode.
		It will detect changes on the files sytem event when CACHE is on.
		 -->
		
		<!-- declare virtual folders and database connections in VIRTUAL -->
		<VIRTUAL>
			
			<!-- virtual folders examples -->

			<!-- this folder url will become /data/ -->
			<FOLDER NAME="data" MAPPING="C:/JsetProject/ProjectName/data"/>
			
			<!-- virtual sub folder example, has a PARENT attribute (parent can be physical or virtual) -->
			<!-- this folder url will become /data/datasub/ -->
			<FOLDER NAME="subdata" MAPPING="C:/JsetProject/ProjectName/subdata" PARENT="data"/>
			
			<FOLDER NAME="i" MAPPING="C:/JsetProject/_i"/>
			<FOLDER NAME="img" MAPPING="C:/JsetProject/_img"/>

			<!-- client side jars called by html applet files -->
			<FOLDER NAME="jar" MAPPING="C:/JsetProject/_jar"/>

			<!-- Jset.com website addOns -->
			<FOLDER NAME="addOn" MAPPING="C:/JsetProject/_addOn"/>
			<!-- www.ovale.com demo -->
			<FOLDER NAME="webShop" MAPPING="C:/JsetProject/Ovale/web2"/>
			<!-- TradeShow database demo -->
			<FOLDER NAME="TradeShow" MAPPING="C:/JsetProject/TradeShow"/>

			<!-- replace myServiceName by the service name you wish to use for the database -->
			<!-- replace DbName (or dbname) by the real database name -->

			<!-- MS SQL Express database, dynamic client -->
			<SERVICE NAME="myServiceName" CLASS="jset.server.http.data.sql.JsSQLDynaService" DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver" URL="jdbc:sqlserver://localhost\SQLEXPRESS:1433;databaseName=DbName;selectMethod=Cursor" USERNAME="sa" PASSWORD="password"/>
			
			<!-- MS SQL Express database, static client -->
			<SERVICE NAME="myServiceName_stc" CLASS="jset.server.http.data.sql.JsSQLStaticService" DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver" URL="jdbc:sqlserver://localhost\SQLEXPRESS:1433;databaseName=DbName;selectMethod=Cursor" USERNAME="sa" PASSWORD="password"/>

			<!-- mySQL database, dynamic client -->
			<SERVICE NAME="myServiceName" CLASS="jset.server.http.data.sql.JsSQLDynaService" DRIVER="com.mysql.jdbc.Driver" URL="jdbc:mysql://localhost:3306/dbname" USERNAME="root" PASSWORD="password"/>
			
			<!-- mySQL database, static client -->			
			<SERVICE NAME="myServiceName_stc" CLASS="jset.server.http.data.sql.JsSQLStaticService" DRIVER="com.mysql.jdbc.Driver" URL="jdbc:mysql://localhost:3306/dbname" USERNAME="root" PASSWORD="password"/>

			<!-- MS Access database, dynamic client -->
			<SERVICE NAME="myServiceName" CLASS="jset.server.http.data.sql.JsSQLDynaService" URL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:/JsetProject/Demo/db/DbName.mdb" USERNAME="" PASSWORD="" RELOG_LEVEL="1"/>
			
			<!-- MS Access database, static client -->
			<SERVICE NAME="myServiceName_stc" CLASS="jset.server.http.data.sql.JsSQLStaticService" URL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:/JsetProject/Demo/db/DbName.mdb" USERNAME="" PASSWORD="" RELOG_LEVEL="1"/>

			<!-- required for the Jset client data file components (file view rendered by combo, tree, grid, and panel) -->
			<SERVICE NAME="FolderBrowser" CLASS="jset.server.http.data.folder.JsFolderService"/>
			
			<!-- required for client side exports -->
			<SERVICE NAME="Upload" CLASS="jset.server.http.service.file.JsFileUploadService"/>
		
		</VIRTUAL>
		
		<!-- required for Jset client invoking server services -->
		<FILTER CLASS="jset.server.http.service.JsClientServerFilter"/>
		
		<!-- client server real-time modes, not needed if you are not using the Jset client -->
		<!-- to disable one or 2 modes, just remove the XML node(s) -->
		<FILTER CLASS="jset.server.http.realtime.JsRealtimeFilter">
			
			<!-- real-time, two separate sockets (incoming and outgoing data), requires http 1.1 client side -->
			<!-- will be initated if tunnel not specified or failed to function properly -->
			<!-- can be blocked by client side antivirus software (network traffic monitoring) -->
			<!-- recommended for intranets and extranets -->
			<CONNECTOR CLASS="jset.server.http.realtime.media.JsTunnelMedia"/>
			
			<!-- real-time, same socket for incoming and outgoing data, recommended on the internet -->
			<!-- will be initated when tunnel is not specified or failed to function properly -->
			<CONNECTOR CLASS="jset.server.http.realtime.media.JsHttpMedia"/>
			
			<!-- smart pull (when sockets cannot be persistent) -->
			<!-- will be initated if tunnel & media not specified or failed to function properly -->
			<!-- will perform regular updates depending on updates frequency ((based on our algorithm) -->
			<CONNECTOR CLASS="jset.server.http.realtime.media.JsPullMedia"/>
		
		</FILTER>
	
	</MAPPING>

	<!-- more paths (not located under root neither mapped as virtual directories) to monitor (detect changes when CACHE is on). -->	

	<WATCH FOLDER="C:/JsetProject/OtherProjectFolder"/>
	<WATCH FOLDER="C:/JsetProject/OtherProjectFolder2"/>

	<!-- PROCESSOR is required to have the Jset server process your server side code.
	HEADER and FOOTER file name.ext will be processed before files in the same folder.
	If subfolders do not contain one of these files, the first parent HEADER/FOOTER files found will be processed.
	-->
	<PROCESSOR NAME="def" CLASS="jset.server.http.report.JsHttpReportEngine" HEADER="auto.hdr" FOOTER="auto.ftr">
		<INIT>
			"
			// Code located in this INIT is executed at host startup.

			global['loginTable']='USR';
			global['dbs'] = 'Adimante,Eclaireur,GBS,Jset,Immo,Market500,MarketListings,Ovale,SocialMedia,TradeShows';

			// global['rootPath']='C:/JsetProject/_addOn/root';
			global['startPath']='C:/JsetProject';
			global['data']='data';

			// XML default databases
			global['db'] = 'Jset';

			global['MAIL_DTS'] = new Bag();
			global['MAIL_DTS']['NAME'] = global['db'];
			global['MAIL_DTS']['SOURCE'] = '/'+global['MAIL_DTS']['NAME'];
			global['MAIL_DTS']['DYN'] = getService(global['MAIL_DTS']['SOURCE']);
			global['MAIL_DTS']['STC'] = getService(global['MAIL_DTS']['SOURCE']+'_stc');

			global['SHOP_DTS'] = new Bag();
			global['SHOP_DTS']['NAME'] = 'Ovale';
			global['SHOP_DTS']['SOURCE'] = '/'+global['SHOP_DTS']['NAME'];
			global['SHOP_DTS']['DYN'] = getService(global['SHOP_DTS']['SOURCE']);
			global['SHOP_DTS']['STC'] = getService(global['SHOP_DTS']['SOURCE']+'_stc');

			global['shop'] = '/Ovale';

			global['src'] = '/'+global['db'];
			global['dyn'] = getService(global['src']); 
			global['stc'] = getService(global['src']+'_stc');

			dbs = global['dbs'].split(',');
			for(i=0; i < dbs.length(); i++) 
			{
				db=dbs[i];
				global[db] = getService('/'+db);
				global[db+'_stc'] = getService('/'+db+'_stc');
			}
			
			if(global['loginTable'] != null) global[global['loginTable']]=global['dyn'].runQuery('SELECT * FROM '+global['loginTable']+' ORDER BY firstName DESC, lastName DESC, company DESC;');

			if(global['dbs'].index('Jset,') != -1) global['CPN']=global['Jset'].runQuery('SELECT * FROM CPN ORDER BY NAME;');			
			"
		</INIT>
	</PROCESSOR>

	<!-- 
	this PROCESSOR will be used to process manual PDF exports 
	(your own server side code, not Jset client side automatic exports)
	-->
	<PROCESSOR NAME="txt" CLASS="jset.server.http.report.text.JsTextReportEngine"/>

	<!-- host log files (visits) -->
	<LOG NAME="www.domain.com" FORMAT="yyyy-MM-dd" PATH="C:/JsetProject/MyProject/logVisits">
		<FIELD TYPE="date"/>
		<FIELD TYPE="time"/>
		<FIELD TYPE="c-ip"/>
		<FIELD TYPE="cs-username"/>
		<FIELD TYPE="s-sitename"/>
		<FIELD TYPE="s-ip"/>
		<FIELD TYPE="s-port"/>
		<FIELD TYPE="cs-method"/>
		<FIELD TYPE="cs-uri-stem"/>
		<FIELD TYPE="sc-status"/>
		<FIELD TYPE="sc-bytes"/>
		<FIELD TYPE="cs-bytes"/>
		<FIELD TYPE="cs(User-Agent)"/>
	</LOG>

</HOST>
Once completed you can always start (with or without a license) the Jset server by double clicking the .bat file located in your server folder (will launch the following instruction: java -Xmx512m jset.server.http.JsLauncher).

If you have a license, you can open a cmd prompt, go to the jset/server directory (cd ..), and launch the jset /c instruction to start the Jset server in console mode (will also support Jset external APIs such as Microsoft authentications).

A new release currently under development will include a new Microsoft Windows service (for Java 32 or 64 bits, and not Windows 32 or 64 bits).