| header 1 | header 2 |
|---|---|
| footer 1 | footer 2 |
| cell 1 | cell 2 |
| cell 3 | cell 4 |
| cell 5 | cell 6 |
Wednesday, February 27, 2013
How to style table borders with CSS
Let's imagine you have a HTML table containing some data, and want to style this table using
CSS stylesheet.
Friday, September 7, 2012
JavaScript Object's Property Printer
A JavaScript object is a collection of properties. You can think of a property as a pair (key : value).
To inspect an object in JavaScript you use the
The following function inspects an object by looping on the properties and calling itself recursively.
To inspect an object in JavaScript you use the
for in operator.The following function inspects an object by looping on the properties and calling itself recursively.
var objectInspector = function recursiveObjectInspector(obj) {
var string = '';
for (var propName in obj) {
if(typeof(obj[propName]) !== 'object')
string += propName+" : "+obj[propName]+",\n";
else
string += '\n'+propName+' {\n'+ recursiveObjectInspector(obj[propName])+"}\n";
}
return string;
};
See the Pen object property inspector by Massimiliano De Simone (@maxdesimone) on CodePen.
Saturday, January 21, 2012
How to JNDI datasource in jetty 6
This tutorial deals with the configuration of the mortbay jetty, that can be downloaded from the codehouse foundation: http://jetty.codehaus.org/jetty/
There are two ways to create a JNDI datasource in the jetty application server, you can set up a datasource configuring the Jetty ContextDeployer to deploy a specific WebAppContext or you can do it by configuring the Jetty WebAppDeployer.
If you configure the WebAppContext the datasource will be available for a single web application, if you configure the WebAppDeployer the datasource will be available for all the web applications.
The easiest way to create a datasource is configuring the WebAppDeployer and I'm going to show you how to do it.
You have to edit the file
server configuration:
There are two ways to create a JNDI datasource in the jetty application server, you can set up a datasource configuring the Jetty ContextDeployer to deploy a specific WebAppContext or you can do it by configuring the Jetty WebAppDeployer.
If you configure the WebAppContext the datasource will be available for a single web application, if you configure the WebAppDeployer the datasource will be available for all the web applications.
The easiest way to create a datasource is configuring the WebAppDeployer and I'm going to show you how to do it.
You have to edit the file
jetty-6.x.xx/etc/jetty.xml and add the following elements to theserver configuration:
- an augmented list of plus configuration which is read by the server at start-up time.
- a datasource definition as a JNDI resource
- set a reference into the WebAppDeployer configuration
1 - The plus configuration element you need to add to the jetty.xml file:
2 - Next, the JNDI datasource definition you need to add to the jetty.xml file:
3 - Finally, add a set element referencing the plus configuration list within the element configuring the WebAppDeployer
This is how it looks like the jetty.xml file, finally:
<Array id="plusConfig" type="java.lang.String"> <Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item> <Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item> <Item>org.mortbay.jetty.plus.webapp.Configuration</Item> <Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item> <Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item> </Array>
2 - Next, the JNDI datasource definition you need to add to the jetty.xml file:
<New id="cf" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>jdbc/jndi_name</Arg>
<Arg>
<New class="org.apache.commons.dbcp.BasicDataSource">
<Set name="driverClassName">com.mysql.jdbc.Driver</Set>
<Set name="url">jdbc:mysql://localhost:3306/db_name</Set>
<Set name="username">db_username</Set>
<Set name="password">db_password</Set>
</New>
</Arg>
</New>
3 - Finally, add a set element referencing the plus configuration list within the element configuring the WebAppDeployer
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.WebAppDeployer">
<Set name="contexts"><Ref id="Contexts"/></Set>
<Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps</Set>
<Set name="parentLoaderPriority">false</Set>
<Set name="extract">true</Set>
<Set name="allowDuplicates">false</Set>
<Set name="defaultsDescriptor">
<SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml
</Set>
<Set name="configurationClasses"><Ref id="plusConfig"/></Set>
</New>
</Arg>
</Call>
This is how it looks like the jetty.xml file, finally:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<!-- =============================================================== -->
<!-- Configure the Jetty Server -->
<!-- -->
<!-- Documentation of this file format can be found at: -->
<!-- http://docs.codehaus.org/display/JETTY/jetty.xml -->
<!-- -->
<!-- =============================================================== -->
<Configure id="Server" class="org.mortbay.jetty.Server">
<!-- PLUS Configuration -->
<Array id="plusConfig" type="java.lang.String">
<Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item>
<Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item>
<Item>org.mortbay.jetty.plus.webapp.Configuration</Item>
<Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item>
<Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item>
</Array>
<!-- END PLUS Configuration -->
<!-- JNDI DataSource Definition -->
<New id="cf" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>jdbc/jndi_name</Arg>
<Arg>
<New class="org.apache.commons.dbcp.BasicDataSource">
<Set name="driverClassName">com.mysql.jdbc.Driver</Set>
<Set name="url">jdbc:mysql://localhost:3306/db_name</Set>
<Set name="username">db_username</Set>
<Set name="password">db_password</Set>
</New>
</Arg>
</New>
<!-- END DataSource Definition -->
<!-- =========================================================== -->
<!-- Server Thread Pool -->
<!-- =========================================================== -->
<Set name="ThreadPool">
<New class="org.mortbay.thread.QueuedThreadPool">
<Set name="minThreads">10</Set>
<Set name="maxThreads">200</Set>
<Set name="lowThreads">20</Set>
<Set name="SpawnOrShrinkAt">2</Set>
</New>
<!-- Optional Java 5 bounded threadpool with job queue
<New class="org.mortbay.thread.concurrent.ThreadPool">
<Set name="corePoolSize">50</Set>
<Set name="maximumPoolSize">50</Set>
</New>
-->
</Set>
<!-- =========================================================== -->
<!-- Set connectors -->
<!-- =========================================================== -->
<!-- One of each type! -->
<!-- =========================================================== -->
<!-- Use this connector for many frequently idle connections
and for threadless continuations.
-->
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.nio.SelectChannelConnector">
<Set name="host"><SystemProperty name="jetty.host" /></Set>
<Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set>
<Set name="maxIdleTime">30000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">5000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>
<!-- Use this connector if NIO is not available.
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.bio.SocketConnector">
<Set name="port">8081</Set>
<Set name="maxIdleTime">50000</Set>
<Set name="lowResourceMaxIdleTime">1500</Set>
</New>
</Arg>
</Call>
-->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- To add a HTTPS SSL listener -->
<!-- see jetty-ssl.xml to add an ssl connector. use -->
<!-- java -jar start.jar etc/jetty.xml etc/jetty-ssl.xml -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- To allow Jetty to be started from xinetd -->
<!-- mixin jetty-xinetd.xml: -->
<!-- java -jar start.jar etc/jetty.xml etc/jetty-xinetd.xml -->
<!-- -->
<!-- See jetty-xinetd.xml for further instructions. -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- =========================================================== -->
<!-- Set up global session ID manager -->
<!-- =========================================================== -->
<!--
<Set name="sessionIdManager">
<New class="org.mortbay.jetty.servlet.HashSessionIdManager">
<Set name="workerName">node1</Set>
</New>
</Set>
-->
<!-- =========================================================== -->
<!-- Set handler Collection Structure -->
<!-- =========================================================== -->
<Set name="handler">
<New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.mortbay.jetty.Handler">
<Item>
<New id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection"/>
</Item>
<Item>
<New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"/>
</Item>
<Item>
<New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>
<!-- =========================================================== -->
<!-- Configure the context deployer -->
<!-- A context deployer will deploy contexts described in -->
<!-- configuration files discovered in a directory. -->
<!-- The configuration directory can be scanned for hot -->
<!-- deployments at the configured scanInterval. -->
<!-- -->
<!-- This deployer is configured to deploy contexts configured -->
<!-- in the $JETTY_HOME/contexts directory -->
<!-- -->
<!-- =========================================================== -->
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.ContextDeployer">
<Set name="contexts"><Ref id="Contexts"/></Set>
<Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>
<Set name="scanInterval">5</Set>
</New>
</Arg>
</Call>
<!-- =========================================================== -->
<!-- Configure the webapp deployer. -->
<!-- A webapp deployer will deploy standard webapps discovered -->
<!-- in a directory at startup, without the need for additional -->
<!-- configuration files. It does not support hot deploy or -->
<!-- non standard contexts (see ContextDeployer above). -->
<!-- -->
<!-- This deployer is configured to deploy webapps from the -->
<!-- $JETTY_HOME/webapps directory -->
<!-- -->
<!-- Normally only one type of deployer need be used. -->
<!-- -->
<!-- =========================================================== -->
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.WebAppDeployer">
<Set name="contexts"><Ref id="Contexts"/></Set>
<Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps</Set>
<Set name="parentLoaderPriority">false</Set>
<Set name="extract">true</Set>
<Set name="allowDuplicates">false</Set>
<Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>
<Set name="configurationClasses"><Ref id="plusConfig"/></Set>
</New>
</Arg>
</Call>
<!-- =========================================================== -->
<!-- Configure Authentication Realms -->
<!-- Realms may be configured for the entire server here, or -->
<!-- they can be configured for a specific web app in a context -->
<!-- configuration (see $(jetty.home)/contexts/test.xml for an -->
<!-- example). -->
<!-- =========================================================== -->
<Set name="UserRealms">
<Array type="org.mortbay.jetty.security.UserRealm">
<Item>
<New class="org.mortbay.jetty.security.HashUserRealm">
<Set name="name">Test Realm</Set>
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
<Set name="refreshInterval">0</Set>
</New>
</Item>
</Array>
</Set>
<!-- =========================================================== -->
<!-- Configure Request Log -->
<!-- Request logs may be configured for the entire server here, -->
<!-- or they can be configured for a specific web app in a -->
<!-- contexts configuration (see $(jetty.home)/contexts/test.xml -->
<!-- for an example). -->
<!-- =========================================================== -->
<Ref id="RequestLog">
<Set name="requestLog">
<New id="RequestLogImpl" class="org.mortbay.jetty.NCSARequestLog">
<Set name="filename"><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Set>
<Set name="filenameDateFormat">yyyy_MM_dd</Set>
<Set name="retainDays">90</Set>
<Set name="append">true</Set>
<Set name="extended">false</Set>
<Set name="logCookies">false</Set>
<Set name="LogTimeZone">GMT</Set>
</New>
</Set>
</Ref>
<!-- =========================================================== -->
<!-- extra options -->
<!-- =========================================================== -->
<Set name="stopAtShutdown">true</Set>
<Set name="sendServerVersion">true</Set>
<Set name="sendDateHeader">true</Set>
<Set name="gracefulShutdown">1000</Set>
</Configure>
Wednesday, January 18, 2012
How to jetty on Debian
This tutorial is about how to install the jetty servlet engine on Debian.
To install jetty, type on the shell:
To install jetty, type on the shell:
sudo apt-get install jetty libjetty-java libjetty-extra libjetty-extra-javaafter installation, edit the file:
/etc/default/jettymodify the line:
NO_START=1to be:
NO_START=0To listen to connections from localhost uncomment the line:
JETTY_HOST=$(uname -n)The jetty home directory is in the sharable folder of the user binaries:
/usr/share/jettyTo stop jetty, type on the shell:
/etc/init.d/jetty stopTo start jetty, type on the shell:
/etc/init.d/jetty startTo deploy a web app, copy the WAR file to the folder
/var/lib/jetty/webappsTo configure the jetty server, edit the file:
/etc/jetty/jetty.xml
Friday, October 21, 2011
Hello entry
Hi everybody, I'm Max and this is my SW technology blog.
Subscribe to:
Posts (Atom)