Einträge werden als ‘Java’ kategorisiert
On a Weblogic 10 environment, you may get an error like
javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: „java.sql.SQLException: No suitable driver found for jndi_ds
if you are using the sql-taglib to access your JNDI name from the Weblogic application server, configured via the Weblogic console.
The solution is quiet simple, but not that good documented. It is not possible to use the paramter „driver“ inside the sql:setDataSource – tag. You rather have to promote the JNDI name in your web.xml like this:
<resource-ref>
<res-ref-name>jndi_ds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Than you can set the dataSource with the sql:setDataSource – tag like this:
<sql:setDataSource dataSource="jndi_ds" />
and finally use the sql-taglib as you did in any other environment like Tomcat server and so on.
Kategorien: Engineering · Java · Oracle · Weblogic
Mit Tag(s) versehen: datasource, jndi, Oracle, sql, tag, Tomcat, Weblogic
On a Weblogic server, you don’t need a rewite rule or filter to get rid of this …;jsessionid… stuff on any URL build using the „c:url“ tag. You simply need to put one more line to your weblogic.xml:
<session-descriptor>
<url-rewriting-enabled>false</url-rewriting-enabled>
</session-descriptor>
Kategorien: Java · Oracle · Weblogic
Mit Tag(s) versehen: Oracle, Weblogic
Das beliebte Java-Sucheframework Apache Lucene ist in der Version 2.9 erschienen. Neben einem überarbeiteten Unicode-Support gibt es ein neues Query-Parser-Framework. Umsteiger von Version 2.8 sollten jedoch aufpassen, da sich die API zum Teil geändert hat. Auf JAXEnter wurde übrigens eine Artikelserie zum Thema Lucene eingerichtet.
Kategorien: Apache · Java
Mit Tag(s) versehen: Apache, lucene, search, suche
Magnolia hat das unter der GPL stehende CMS in der Version 4.1 veröffentlicht.
Kategorien: Java · Presentation Layer
Sun ist endlich unter der haube. nachdem der deal mit Big Blue IBM geplatzt war, hat nun Oracle zugeschlagen. Siehe prnewswire.com
oracle, sun, java
Kategorien: JSF · Java · Newsflash · Oracle · SUN
Kategorien: Java
Mit Tag(s) versehen: image, Java, resize, scaling
WebKit for SWT (ver. 0.5) is an embeddable Java™ WebKit browser component developed by Genuitec. This component can be used in the development of a wide range of Java SWT applications that require integration of rich HTML5, CSS3, JavaScript and Flash content and functionality.
Find more information at www.genuitec.com/about/labs.html and www.golem.de/0903/65697.html.
Kategorien: Java · Newsflash
Mit Tag(s) versehen: Java, swt, webkit
To install the Subclipse plugin:
1. In Eclipse, click Help -> Software Updates -> Find and Install…
2. Choose „Search for new features to install“.
3. Click the „Add Site…“ button.
4. Enter „[WWW] http://subclipse.tigris.org/update“ into the URL field. Click OK.
5. Eclipse will contact the Subclipse site for available plugins. Select „Subclipse“, „Version Control with Subversion“ and click Next.
6. Accept the terms of the agreement, and click „Finish“.
7. The plugins will probably not be signed. You will get warnings. Click „Install“.
8. If prompted, click to restart the Eclipse workbench.
Feel free to visit eclipse.org/subversive for a more powerful SVN tool!
Kategorien: Java
public Date getLocalCurrentDate() {
TimeZone timeZone = TimeZone.getTimeZone(„Greece“);
TimeZone defaultZone = TimeZone.getTimeZone(„GMT“);
Date localDate = new Date();
Date yourDate = new Date();
yourDate.setTime(localDate.getTime() + timeZone.getRawOffset() – defaultZone.getRawOffset() – defaultZone.getDSTSavings());
return yourDate;
}
Kategorien: Java
Mit Tag(s) versehen: day, Java, light, saving, shift, time, zone
Hier eine simple methode, um zu einem String einen passenden MD5 hash zu generieren:
/**
* generates a md5 hash from a string
*
* @param input – the string the md5 has to generate from
* @return – a md5 hash as a a string
*/
public String getMD5Hash(String input) {
StringBuffer stringBuffer = new StringBuffer(BUFFER_CAPACITY);
try {
MessageDigest md5 = MessageDigest.getInstance(„MD5″);
md5.update(input.getBytes());
Formatter f = new Formatter(stringBuffer);
for (byte b : md5.digest()) {
f.format(„%02x“, b);
}
} catch (NoSuchAlgorithmException e) {
log.error(e.getMessage());
}
return stringBuffer.toString();
}
Kategorien: Java
Mit Tag(s) versehen: generate md5 hash code java encryption crypt sha Messag
To calculate a time to another time zone, just
- get a timezone object for the new timezone
- register the timezone object to a formatter
- recalculate the time with the formatter to a string
code sample:
// formatter
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
// local date
Date now = new Date();
// instanciate timezone
TimeZone timezone = TimeZone.getTimeZone(„Japan“);
// register on formatter
df.setTimeZone(timezone);
// recalculate
System.out.println(„Japan time is:“+df.format(now));
Kategorien: Java
Mit Tag(s) versehen: date, Java, recalculate, time, timezone, umrechnung
There are some useful tools to check the load of your box / server – even when you have just only very less permissions (ant ‘top’ is not available):
- ptree – all processes with pid
- prstat – similar to top
- kill -3 <pid> – print (java) stack strace and dump to log
- ps -aelf – you sh’d know it. Otherwise: forget your password.
Kategorien: Apache · Java · Linux · Tomcat
Mit Tag(s) versehen: Linux, prstat, ps, ptree, solaris, SUN, unix
Seit Java 1.4 gibt es die Möglichkeit, die AWT-Klassen auch ohne laufendem X-Server zu nutzen. Es reicht, beim Aufruf des Programms den Schalter „/…/jre/bin/java -Djava.awt.headless=true“ zu setzen.
Kategorien: Java · Linux
Mit Tag(s) versehen: awt, graphics, headless, Java, java2d, windows, x
Beim Einsatz von Velocity in Spring Projekten kannes vorkommen, dass Velocity im „aktuellen“ Verzeichnis loggen will. Jedoch kann Velocity auch ein existierendes Commons Logging / Log4j mit nutzen, indem man im classpath eine velocity.properties-Datei anlegt:
#runtime.log.logsystem.class=org.apache.velocity.runtime.log.SimpleLog4JLogSystem
runtime.log.logsystem.class=org.apache.velocity.tools.generic.log.CommonsLogLogSystem
runtime.log.logsystem.log4j.category=velocity
Kategorien: Java · Tomcat
Mit Tag(s) versehen: commons, log, log4j, logging, spring, Tomcat, velocity
Da jedes String-Objekt eine replace-Methode besitzt, dei in der Lage ist, reguläre Ausdrücke zu verarbeiten, bietet sind folgendes an:
newString = myString.replaceAll("(\r\n|\r|\n|\n\r)", "<br>");
Jeder Zeilenumbruch – egal ob die Eingabe von einem Windows-, Linux oder Mac stammt, wird nun html-Konform mit br-Tags umgewandelt.
Kategorien: Java
Mit Tag(s) versehen: txt2html
c3p0 is an easy-to-use library for augmenting traditional (DriverManager-based) JDBC drivers with JNDI-bindable DataSources, including DataSources that implement Connection and Statement Pooling, as described by the jdbc3 spec and jdbc2 std extension.
URL: sourceforge.net/projects/c3p0
Kategorien: Interesting Java Sites · Java · Links
Ehcache is a widely used java distributed cache for general purpose caching, Java EE and light-weight containers.
It features memory and disk stores, replicate by copy and invalidate, listeners, cache loaders, cache extensions, cache exception handlers, a gzip caching servlet filter and much more…
Ehcache is available under an Apache open source license and is actively developed, maintained and supported.
Link: ehcache.sourceforge.net
Kategorien: Interesting Java Sites · Java · Links
Spring bietet mit dem Application Context eine mächtige Varante, um Applikationen zu konfigurieren. Manchmal benötigt man aber z.B. zwischen Developer-Rechner und Live-Server nur eine kleine Änderung – die man dann aber in der oder den Context-Dateien suchen und anpassen müsste. Oder man hat Values, die sich häufig wiederholen….
Spring löst dies durch einen Mechanismus, mittels dem man Variablen als key/value-Paare in einer Properties-Dateu ablegen und dann in den Context-Dateien zugreifen kann.
Der erste Eintrag in der applicationContext.xml – Datei könnte somit folgendermaßen aussehen:
<bean id=“placeholderConfig“ class=“org.springframework.beans.factory.config.PropertyPlaceholderConfigurer“>
<property name=“location“ value=“/WEB-INF/developer.properties“ />
<property name=“ignoreResourceNotFound“ value=“false“ />
<property name=“ignoreUnresolvablePlaceholders“ value=“false“ />
<property name=“searchSystemEnvironment“ value=“false“ />
</bean>
Hiermit wird die Datei /WEB-INF/developer.properties eingebunden, die aus simplen Key-Value-Zeilen besteht. Ab sofort kann in der aktuellen und in jeder per „import resource“ eingebundenen context.xml auf diese Werte zugegriffen werden:
<;bean id=“meineBeanId“ class=“de.snad.meineBean“>
<property name=“myProperty“ value=“${variable}“>
</bean>
Siehe
Kategorien: Java
Mit Tag(s) versehen: applicationcontext, placeholder, properties, spring, xml
Hibernate legt Mappingtabellen ohne primary Key an. Wenn dennoch jeder Entry nur ein mal vorkommen soll, macht es Sinn, als Datentyp keine List oder Collection sondern ein Set zu deklarieren.
Siehe Hibernate Manual: 2.2.5.3. Collections
Kategorien: Hibernate · Java · Links
„Pocket Dope“ beschreibt auf pocketdope.blogspot.com einen interessante Weg, ein aktuelles Java auf Debian Etch zu bekommen.
Nachdem Java 1.6 auch auf „backports“ verfügbar ist, reicht allerdings auch ein Hinzufügen der Zeile
deb http://www.backports.org/debian etch-backports main contrib non-free
zu der Datei /etc/apt/sources.list.
Die Installation Erfolgt dann einfach über
aptitude update
aptitude -t etch-backports install sun-java6-jdk
Anschließend noch schnell die Default-Version auswählen:
update-alternatives –config java
Kategorien: Java · Linux
There are dozens of Java frameworks out there, but most of them require you to learn special coding techniques and new, often rigid, patterns of development. Wicket is different. As a component-based web application framework, Wicket lets you build maintainable enterprise-grade web applications using the power of plain old Java objects (POJOs), HTML, Ajax, Spring, Hibernate, and Maven. Wicket automatically manages state at the component level, which means no more awkward HTTPSession objects. Its elegant programming model enables you to write rich web applications quickly.
Wicket in Action is an authoritative, comprehensive guide for Java developers building Wicket-based web applications. This book starts with an introduction to Wicket’s structure and components, and moves quickly into examples of Wicket at work. Written by two of the project’s earliest and most authoritative experts, this book shows you both the “how-to” and the “why” of Wicket. As you move through the book, you’ll learn to use and customize Wicket components, how to interact with other technologies like Spring and Hibernate, and how to build rich, Ajax-driven features into your applications.
Weitere Infos auf manning.com
Kategorien: Apache · Hibernate · Java · Java Portals & Frameworks · Newsflash · Tomcat
easy.
private String inputStreamToString(InputStream in) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line + „\n“);
}
bufferedReader.close();
return stringBuilder.toString();
}
Kategorien: Java
Apache Tomcat velangt nach einer Java VM – jedoch möchte man ggf eine andere verwenden, als auf dem System installiert ist?!
Apache Tomcat wird über ein Script gestartet, in dem sich auch wunderbar die entsprechenden Variablen überschreiben lassen. Wichtig ist dann nur, dies auch für das Shutdown-Script zu erledigen.
Durch Anpassung des startup.sh – Scriptes ist dies also einfach möglich!
# set my own java path
export JRE_HOME=/usr/java/jre1.6.0_01
# increase memory size
export JAVA_OPTS=-XX:MaxPermSize=512m
Es wird nun eine Java VM von einem bestimmten Pfad verwende, und auch die Optionen um den zu nutzenden Speicher zu vergrößern können gleichmit angegeben werden.
In der Datei shutdown.sh sollte jedoch mindesten die Zeile export JRE_HOME=/usr/java/jre1.6.0_01 nochmals angegeben werden, da ansonsten wieder die systemweit genutzte Environment-Variable verwendet werden würde.
Kategorien: Apache · Java · Tomcat
MySQL in Version 5 will gern und viel seine Tabellen mit dem characterEncoding latin1_swedish_ci anlegen. Das führt jedoch bei Strings mit Sonderzeichen (zum Beispiel Buchstaben aus dem griechischen Alphabet) zu einigen Problemem. Ein generelles Encoding auf utf8 löst die meisten.
Leider kann Hibernate von Haus aus dieses Encoding nicht einstellen. Verschiedene Testes führen nicht zum Erfolg:
Versuch 1: der Entity-Annotation einen Parameter mitgeben. Leider gibt es hier aber keinen Paramter der diese Einstellung verwalten kann. Auch ein alter table nach dem @Entity via @SQLUpdate(sql=“ALTER TABLE …. CHARACTER SET utf8 COLLATE utf8_general_ci;“) führt nicht zum Erfolg.
Versuch 2: in der Konfiguration hibernate.cfg.xml die Connection URL anpassen:
<property name=“connection.url“> jdbc:mysql://server/database?useUnicode=true&characterEncoding=UTF8 </property>
… doch in bezug auf das Anlegen der Tabellen zeigt dies keine Wirkung.
Versuch 3: Einen eigenen SQL Dialekt schreiben! das geht bei Hibernate denkbar einfach, da man die bestehenden Dialekte überschreiben kann.
import org.hibernate.dialect.MySQLMyISAMDialect;
/**
* MySQL Dialect for using utf8 table types
*/
public class MysqlDialectUtf8 extends MySQLMyISAMDialect {
public String getTableTypeString() {
return “ ENGINE=MyISAM DEFAULT CHARSET=utf8″;
}
}
In der hibernate.cfg.xml wird nun einfach auf den eigenen Dialect verwiesen:
<property name=“dialect“>
de.my-container.project.hibernate.dialect.MysqlDialectUtf8
</property>
et voila. Die Tabellen werden nun mit dem characterEncoding UTF 8 angelegt, womit Sonderzeichen keine Probleme mehr machen!
Kategorien: Hibernate · Java
Java stellt zur Datumsberechnung einige Klassen in Java.util.* bereit. Zur berechnung von Differnzen eignen sich die Klassen Date() und Calendar(). Beispiel:
private void deleteOldLogmessages(int beforeMonths) {
// heute:
Date now = new Date();
// Formatierung fuer Ausgabe
String DATE_FORMAT = „dd-MM-yyyy“;
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
System.out.println(„cal now: „+sdf.format(calendar.getTime()));
// Calendar.add(): Datumsdiferent, diese Funktion ist Sicher über Jahresgrenzen hinweg!
calendar.add(Calendar.MONTH, beforeMonths);
System.out.println(„cal -3: „+sdf.format(calendar.getTime()));
// debug…
Date deleteBeforedate = new Date();
deleteBeforedate = calendar.getTime();
System.out.println(„now: „+now.getTime());
System.out.println(„sub: „+deleteBeforedate.getTime());
System.out.println(„diff: „+(now.getTime() – deleteBeforedate.getTime()));
}
Kategorien: Java
Das Wicket-Team spendiert uns zum neuen Jahr eine neue Version: Apache Wicket 1.3.0 ist die erste offiziell Release als Apache-Projekt. Details zum Projekt finden sich unter: wicket.apache.org
Kategorien: Apache · Java · Newsflash
Eine Methode, um eine Java-Anwendung einen Moment lang warten zu lassen – implementiert mit Hilfe von java.util.Date:
private void delay(long ms) {
Date d = new Date();
Date e;
long cTime = d.getTime();
long tTime;
do {
e = new Date();
tTime = e.getTime();
} while (tTime – cTime <= ms);
return;
}
Kategorien: Java
Am 17.12.2007 findet das Eclipse Demo Camp in Hamburg statt. Die DemoCamps sollen offen für alle sein. Weitere Informationen findet ihr hier.
Kategorien: Java · Newsflash
Inzwischen ist Apples Mac OS X recht beliebt unter Softwareentwicklern. Doch leider hat SUN bislang keine Portierung von Java 6 auf Mac OS X „Leopard“ geschafft – und Apple bietet die Software über den Update-Dienst nicht an. Inzwischen scheint es aber eine erfolgreiche Portierung vom FreeBSD Java 6 auf Leopard OSX zu geben – siehe: http://landonf.bikemonkey.org/code/macosx/.
Inzwischen hat Landon die erste Binärdistribution von Java 6 erstellt, die sogar auch auf Tiger läuft: http://landonf.bikemonkey.org/code/macosx/MacOS_BSD_Java.html
Kategorien: Apple · Java · MAC · SUN
SUN hat auf seiner Webseite ein Interview mit dem Titel „Becoming a Better programmer: A Conversation With Java Champion Heinz Kabutz“ veröffentlicht. Der aus Deutschland stammende Kabutz hat im November 2000 den „Java Specialists Newsletter“ gestartet, der derzeit an über 30,000 Abonnenten in 116 Ländern versendet wird. Lesenswert!
Link: java.sun.com/developer
Kategorien: Java · SUN
Sun hat seinen J2EE-Anwendungsserver Glassfish in Version 2.0 freigegeben. Links dazu:
Kategorien: Java · Links · SUN
Eine Alternative zu Microsoft (R) Project gibt es nun aus dem Open-Source-Lager. Die Firma Projitiy hat heute eine neue Version der Software „OpenProj“ veröffnelticht. Das Programm arbeitet ähnlich wie MS Project und kann offenbar sogar die Project-Dateien lesen. Ein erster Test verlief sehr vielversprechend, auch wenn an einigen Stellen wohl noch Nachholbedarf besteht.
OpenProj ist in Java geschrieben und somit auch für Mac- und Linux-Nutzer interessant. Die Software ist auf sf.net gehostet und kann unter http://sourceforge.net/projects/openproj/ geladen werden.
Kategorien: Apple · Java · Linux · MAC · Newsflash
Nach wie vor ist der Apache Httpd schneller als ein Apache Tomcat, wenn es um die Auslieferung von statischen Inhalten geht. Gerade in Verbindung mit Tomcat bietet der Apache Httpd noch weitere Vorteile: durch das Modul mod_jk kann eine ganze Farm an Tomcat-Servern per Load Balancer angeschlossen werden!
Für den Betrieb benötigt man:
- einen funktionierenden Apache Httpd-Server
- einen funktionierenden Apache Tomcat-Server
- das Modul mod_jk, welches auf der Tomcat-Webseite zum download erhältlich ist
Das Modul habe ich zur Vereinfachung nach dem Download in „mod_jk.so“ umbenannt und im Lib-Verzeichnis des Apache Httpd abgelegt (auf SuSE Linux 10.2: /usr/lib/apache2).
Der Apache Httpd ist auf SuSE Linux so konfiguriert, dass alle Dateien, die auf *.conf enden und in /etc/apache2/conf.d liegen, automatisch zu httpd.conf (bzw default-server.conf) included werden. Das macht die weitere Konfiguration einfach, denn nun müssen in dem o.g. Verzeichnis nur zwei Konfigurationsdateien abgelegt werden.
Die Datei tomcat.conf bindet mod_jk ein:
# Load mod_jk module
# Update this path to match your modules location
LoadModule jk_module /usr/lib/apache2/mod_jk.so
# Declare the module for <IfModule directive> (remove this line on Apache 2.x)
#AddModule mod_jk.c
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile /etc/apache2/conf.d/workers.properties
# Where to put jk shared memory
# Update this path to match your local state directory or logs directory
JkShmFile /var/log/apache2/mod_jk.shm
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile /var/log/apache2/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel debug
# Select the timestamp log format
JkLogStampFormat „[%a %b %d %H:%M:%S %Y] „
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount /application/* worker1
In der Datei müssen ggf. die Pfade zu mod_jk.so sowie zu den Log-Files angepasst werden.
Mit JkWorkersFile wird auf die Konfigurationsdatei des mod_jk referenziert. Alle Anfragen im Format http://www.domain.tld/application werden nun an mod_jk übergeben.
Die Datei workers.properties ist – sofern nur ein einziger Tomcat-Server angebunden werden muss, sehr kurz:
# Define 1 real worker using ajp13
# this coud be al list in the format
# worker.list=worker1, worker2, worker3, worker4
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
Das Format zum Konfigurieren der einzelnen Worker ist also worker.<workername>.<property> . In der Beispielkonfiguration wird also nur ein Worker mit dem Namen „worker1“ genutzt, der auf dem gleichen Host läuft und mittels dem Protokoll ajp13 angesprochen wird.
Über die URL http://www.<domain>.<tld>/application erreicht man nun also direkt die Application auf dem Tomcat.
Quellen & weiterführende Links:
Kategorien: Apache · Apache httpd · Java · Linux · Tomcat
Eine häufige Aufgabe ist das Runden von Zahlen. Java stellt hier bereits einige Funktionen bereit, die ich in diesem Artikel kurz vorstellen möchte:
einen Double-Wert auf maximal 2 Nachkommastellen runden:
java.lang.Math:
myDoubleRounded = Math.round( myDoubleValue * 100. ) / 100.;
einen Double-Wert auf genau 2 Nachkommastellen runden + Konvertierung zu String
import java.text.DecimalFormat;
DecimalFormat df = new DecimalFormat(„0.00″);
String myFormattedString = df.format(myDoubleValue);
einen Double-Wert auf genau 2 Nachkommastellen runden, deutsche Formatierung verwenden + Konvertierung zu String
import java.util.*;
DecimalFormat df = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN);
df.applyPattern(„#,###,##0.00″);
String myFormattedString = df.format(myDoubleValue);
Kategorien: Java
Einige Prozesse lasen sich nicht ohne weiteres an „kill“ / „killall“ übergeben, da der Prozessname Leerzeichen enthält. Gerade bei Java-Anwendungen ist das meistens der Fall, da die JRE im Prozessnamen enthalten ist und ggf auch Parameter mit aufgeführt werden. Meist ist also nur ein Teil des Prozessnamens bekannt, z.B. das jar-Archiv.
Folgender Befehl extrahiert die PID, wenn nur der Name des jar-Archives bekannt ist:
ps ax | grep -v grep | grep ‘meinjavaprogramm.jar’ | awk ‘{print $1}’
Als Ergebis wird NUR die PID ausgegeben, z.B. 14244. Die kann kann an „kill“ angehängt werden: kill [param] 14244
Kategorien: Java · Linux
Workshop, Peter Roßbach @ JAX ‘07, Wiesbaden + + +
Integration in Maven: Projekt Cargo
News in Tomcat 6
- Support für Servlet 2.5 und JSP 2.1 API’s
- Apache 2.0 Lizenz
- Neue Connectoren (NIO)
- Reduktion der Abhängigkeiten, Vereinfachung der Verzeichnisstrucktur
- Neue JSP Engine (w/ JSF)
- Coyote Connectoren optimiert: Verbesserung der Performance, Mod_JK 1.2.22, Native Connectoren im Tomcat >= 5.5.17
- Erleichterung der Administration (JMX 1.2)
- Einsatz des Eclipse 3.2 Compiler (JRE ready mit Java 5 JDT) – schneller, kleiner, besser handlebare Lizenz
Tomcat
- jsvr – Wrapper für Tomcat, funktioniert wie Watchdog
- Security Manager – steuert Zugriff auf Systemressourcen
App Reload (während der Entwicklungszeit)
in context.xml: Resources Monitoring:
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
- Logging seit Tomcat 6.x
- neues API
- neues layout der Konfig Datei
Ports
- 8080 – http
- 8443 – https
- 8009 – ssl
- 8005 – shutdown
- 9000 – JMX-Apdaptor http
- 1099 – JMX-Apdaptor rmi
- 0900 – JMX-Apdaptor iiop
Tomcat Pipeline
- Server > Service > Engine > Host > Context > Wrapper
- jeder Übergang wird mit einer Pipeline verbunden. An den Pipelines können Valves angeflanscht werden
Infos über den Tomcat & Server
- Tool: Lambda Probe
- Link: http://www.lambdaprobe.org
- >> lambdaprobe.org: „Lambda Probe (formerly Tomcat Probe) is a self sufficient web application, which helps to visualize various parameters of Apache Tomcat instance in real time. Lambda Probe is designed to work specifically with Tomcat so it is able to access far more information that is normally available to JMX agents.“
- Umfassende Infos über Tomcat, Apps, JVM…
- noch keine vollständige Unterstützung von Tomcat 6.x (Stand: 2007-04-27)
Protokoll-Handler austauschen
- in der server.xml wird das Protokoll gegen eine Klasse ausgtauscht, die das Protokoll implementiert
<Connector port=“8080″ protocol=“org.apache.coyote.http11.Http11NioProtocol“
connectionTimeout=“20000″
redirectPort=“8443″ />
<!–
<Connector port=“8080″ protocol=“HTTP/1.1″
connectionTimeout=“20000″
redirectPort=“8443″ />
–>
Arbeiten mit mod_jk
- Eigenen conf-Datei in httpd.conf includen:
<IfModule !mod_jk.c>
LoadModule jk_module „modules/mod_jk.so“
</IfModule>
JkShmFile „logs/mod_jk.shm“
JkLogFile „logs/mod_jk.log“
JkLogLevel info
JKWorkersFile conf/workers.properties
JKWorkerProperty worker.list=loadbalancer,jkstatus
JKWorkerProperty worker.node01.port=8009
JKWorkerProperty worker.node01.host=localhost
JKWorkerProperty worker.node01.type=ajp13
JKWorkerProperty worker.node01.domain=d10
JKWorkerProperty worker.node01.lbfactor=4
JKWorkerProperty worker.loadbalancer.type=lb
JKWorkerProperty worker.loadbalancer.balance_workers=node01
JKWorkerProperty worker.jkstatus.type=status
JkMount /jkstatus jkstatus
JkMount /example* loadbalancer
Tipp: Template verwenden wenn viele Nodes im Einsatz sind:
JKWorkerProperty worker.template.type=ajp13
JKWorkerProperty worker.template.connection_pool_timeout=300
JKWorkerProperty worker.node01.lb.balance_workers_node=node101
JKWorkerProperty worker.node01.reference=worker.template
…
thanks to Peter Roßbach! Great work!
Kategorien: JAX 07 · Java · Tomcat
Java 6 SE kommt bereits mit
- Derby. Funktionen für Stammdatencache etc find also bereits vorhanden.
- JNLP (WebStart)
- Scripting Support
- Remote Monitoring der JVM ist über Netzwerk bereits vorhanden (Java Monitoring an Management Console)
- JPA kann vom Glassfish-Projekt verwendet werden (2 jar’s). Die direkte nutzung von JDBC wird nicht mehr benötigt
- java.util.logging reicht für clientseitiges Logging aus.
- java.util.concurrent: ein einfacher Thread-Pool
- java.rmi: Remothe Method Invocation: einfaches Kommunikationsprotokoll für Client-Server-Kommunikation
- java.util.ServiceLoader – sucht nach implementierungen eines Interfaces (from meta-inf/services) -> eigenen Wrapper für ServiceLoader bauen (S.13)
- java.beans.XMLEncoder und java.beans.XMLDecoder – ein einfacher Web zu persistenten Beans! Allerdinsg sind keine Beziehugen zwischen Objekten möglich
- java.util.preferences – Zurgiff auf Windows Registry
JMX
- wurde entwickelt um Management- und Monitoring-Funktionen anzubieten
- ist in Java 6 SE enthalten. JSR 3 stammt genu genommena us dem Ahr 2001…
- beziet sich auf ein zu definierendes Objekt, weches Daten veröffentlicht. Dieses muss „nur“ registriert werden…
- Registrierung im MBeanServer
- Achtung: eine MBan darf nur ein mal registriert sein, ansonsten wird eine Exception ausgelöst
RMI
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloWorldService extends Remote{
public String helloFromServer(String greeting) throws RemoteException;
}
- Server benötige eine Klasse mit main Methode (aslo qusi der Server)
- Client: fragt über Naming.lookup(„rmi://adress“) Service ab
Scripting Integration
- Vorteile: kann schneller sein in Entwicklungszeit und Ausführung
- Fluid Kernel: Fragmente können dynamisch nachgeladen vwerden – während der Laufzeit!
- JSR-233 (scripting fo the Java Platform)
- Zugriff von den Scriptsprachen auch die Java-Libs möglich!
- siehe Package javax.scripting
ScriptEngineManager engineManager = new ScriptEngineManager();
scriptEngine = engineManager.getEngineByName(„JavaScript“);
- …
- in Java 6: JavaScript hat zur Zeit eine wesentlich höhere Ausführungsgeschwindigkeit als Groovie (etwa Faktor 10!)
JPA
- vollkommener Verzicht auf DAO’s!
- DAO’s nur für Stored Procedures zwingend notwendig
- Eclipse DALI zur generierung von JPA aus RDBs
SWING
- Andere Themes / Layout Manager verwenden
- Matisse GUI Builder
- großer Performancegewinn in Java 6! Außerdem: Java Swing erhält eine native Unterstützung in Windows Vista, was die Ausführungsgeschwindigkeit nochmals wesentlich erhöhen wird!
…
thanks to Adam Bien! (adam-bien.com)
Kategorien: JAX 07 · Java
Idee
- Vereinheitlichung der verschiedenen aktuell genutzten Herangehensweisen (AXIS, Fire, RI,…)
- Interoperabilität mit Fremdsystemen (.NET)
- State-of-the-Art Model für die Entwicklung
Historie
Object / XML Mapping
- mittels JAXB (2.x)
- hohe Performance
- ebenfalls auch als einzelnes Projekt verfügbar
- > http://jaxb.dev.java.net
WSDL to Service
- Ausgangspunkt WSDL, Skeleton bauen, Annotation @WebService(endpointInterface(name=“AddNumbersPort“))
- Deploy 1: Klasse Endpoint; Methode publish. Integriert in JAX-WS
- Deploy 2: über JAX-WS im Web Cotainer, com.sun.xml.transport.http.servlet WSServlet – für „spezielel „Wünsche, zB Load Balancing
- Deploy: interner Server für Service Deployment
- Deploy: main-Methode + Endpoint.publish(„http://localhost:8080/addnumbers“)
- Nutze Annotatins für Konfiguration! @WebMethod, @WebResult, @RequestWrapper…
- Aufruf wie gewohnt über http://localhost:8080/addnumbers?wsdl
WAX-WS Handler
- Logical Handler – Unabhängig vom Protokoll, Zugriff auf Nachrichteninhalt
- SOAP HAndler – Zugriff auf vollständige Nachricht + SOAP HEader
Remote Persistent Objects
- Client <-> Hibernate JPS Service <-> POJOs
- Annotationen: @Stateful @WebService @Adressing
- Zugabe Annotation: @Entity = JPA! reicht aus für die Kennzeichnung als persistentes Objekt
JAX-WS und Java 6
- kein ANT Task vorhanden. Wenn Einsatz mit ANT geplant muss die Standalone-Version verwendet werden
- meist ältere Versionen. Bei der Erstellung von JRE’S wird jeweils der Snapshot des JAX-WS-Repositorys verwendet, was bei aktueller Entwicklungsgeschwindigkeit schnell outdated sein kann
- Update über Java Extensions Mechanismus möglich
- Besserung in Java 7 (Modulkonzept) in Sicht (?)
…
thanks to Andreas Holubek! Great!
Kategorien: JAX 07 · Java
Geschichte
Die Software wurde ursprünglich von der Firma Cloudscape Inc., in Oakland, Kalifornien unter dem Namen JBMS entwickelt. Die erste Version wurde 1997 veröffentlicht. Das Produkt wurde später in „Cloudscape“ umbenannt.
1999 wurde Cloudscape von der Firma Informix Software Inc. gekauft, deren Datenbanksparte 2001 von IBM übernommen wurde. 2004 übereignete IBM die Cloudscape-Software der Apache Software Foundation unter dem Namen „Derby“ als OpenSource Software.
2006 wurde Derby als Java DB in Java 6 integriert.
Benefits
- Einfache Installation, Handhabung, Nutzung, Entwicklung
- Embedded Database
- Plattforumunabhängig
- keine (aktive) Administration (Admin via JDBC)
- small footprint (ca 2mb)
- kostenlos (Apache 2.0 License)
- ODBC Support
- …
Apache Derby <- IBM Cloudscape
- JDBC-Driver by IBM (ODBC driver for free)
- support by IBM
- graphical installer by IBM (doh!)
- samples, documentation (multilaguage), errorcodes by IBM
- same sourcecode! IBM copies souce code and use it for own product build(!)
Overview
- embedded? runs in the VM
- embedded? (2) embedded jdbc driver
- transaction support
- multi-user, multiconnection, thread safe
- deadlock detection
- crash recovery / backup / restore / softupgrade
- multiple database instances
- encryptet databases – use Blowfish, DES, AES etc as you like (!!!)
SQL Language Support
- completly support SQL 92 / 99 / 2003 (!)
- …
Tools + Size
- derby.jar: 2mb
- derbytools.jar
- derbynet.jar
- derbyclient.jar
- memory usage: ca 4 MB Heap
Limitations
- no support for multiprocessors
- database ist only one directory
- 20-30 simultanous connections
- 100-500 updates per second
Installation
- just only put derby in the classpath…
- myDB / services.properties: config file für database
- use derby.properties for autorizing, authentification
- Usage / Connection
- URL: jdbc:derby:mydb;user=someuser…..
- jdbc:derby:shutdown -> stop database
- jdbc:derby;upgrade=true -> update db for new version
- backup: copy the directory
Tools
- Eclipse W/DTP
- tools: sysinfo, ij, dblook
Usage
- ab Java 6 (java 1.6.0) bruach der Classloader nicht mehr verwendet werden. Der Treiber wird bei angabe des Connection Strings automatisch geladen.
Links:
- http://db.apache.org/derby/
- http://db.apache.org/derby/quick_start.html
thanks to Frank Pienta
Kategorien: JAX 07 · Java
Trinidad ist ein Framework
- Render Kit für HTML + Ajax
- Beinhaltet Dialoge, optimierte Komponentenspeicherung
- Maven 2 Faces – Plugin
- Personalisierung / Layout-Anpassungen
- Skinning: CSS-Eigenschaften
Historie
- Trinidad wurde ursprünglich von Oracle geschenkt
- Eingliederung in Apache MyFaces
- Seit Sonntag, 22. April 2007, nicht mehr im Inkubator! Trinidad ist nun eine „offizielle“ Apache MyFaces Komponentenbibliothek
- Lizenz: Apache 2.0
Neuerungen in Trinidad
- Menu Model Abstraction
- Maven 2 Faces Plugin
- >> generiert Komponenten, Tags, XML-Files
- Unterstützung von Facelets
- CSS-Styles / Skinning ist möglich
- Personalizaton Framework ist enthalten
Core Components (not complete)
- tr:breadCrumbs – Navigation
- tr:chart – Diagramm (wird vollständig per Vekorgrafik gerendert!)
- tr:chooseColor – Farbeingabe
- tr:chooseDate – Datumseingabe
- tr:document – Seitencontainer, generiert die Elemente html, body und form.
- tr:goButton & tr:goLink – Buttons / Links ohne Navigation
- tr:icon – Skin
- tr:image – Bild
- tr:importScript – Script Imports
- tr:inputFile – Upload
- tr:navigationPane – Tabs, Bars oder Buttons als Navi-Leiste
- tr:objectMedia – Multimedia-Inhalte
- tr:inputNumberSpinbox – rauf/runter Pfeile, min / max-Values
- tr:page – Layout
- tr:panel* – verschiedene Layout- udn Visualisierungskomponenten
- tr:poll – nutzt tr:progressIndicator, Partals Reload der Seite, progressIndicator triggert tr:poll und erzeugt Updates der Daten, tr:poll besitzt timer und bringt Daten ins GUI. „PPR“: Partial Page Rendering
- tr:select* – Vielzahl an Auswahl-Komponenten
- tr:seperator – Seperator (zB in Menüs, Select-Comps…)
- tr:table – Table, mit Scrolling bereits enthalten
- tr:train – Rendert Navigation
- etc
Verwendung von PPR (Partial Page Rendering)
- autoSubmit – für input-Komponenten, um eine action abzufeuern
- partialSubmit – für command-Komponenten (link / button)
- partialTriggers – für listener, beziehen sich auf eine Komponente (connect per Properties id / partialTriggers)
- Alternativ: eine gewöhnliche Komponente in einem Poll ( tr:poll ) einfassen.
Dialog Framework
- dialog:wizard, useWindow-Attribut setzen
- Darstellung der Seite (nach Request) per Navi-Regel in einem eigenen (Browser-)Fenster
Links:
- Sample App: http://code.google.com/ …trinidad
thanks to Mathias Weßendorf :)
Kategorien: JAX 07 · JSF · Java · MyFaces
- Bekannt: Apache MyFaces, Sun RI
- Aufsätze: Apache Shale, Seam, Ajax4JSF (Interaktion zwischen Ajax und JSF), Facelets
- Komponenten-Bibliotheken: Apache MyFaces Tomahawk / Trinidad / Tobago, ICEFaces, Rich Faces, etc…
Rederklassen und Komponenten sind austauschbar!
- Renderer implementieren Konvertierungen, De- und Encoding…
- In der „faces-config.xml“ kann der Renderer ausgewechselt werden
- Komponenten enthalten Eigenschaften, aber auch selbst En- / Decoding, Validierung und Konvertierung
Auch Kernklassen sind austauschbar. Zum Beispiel der Navigation Handler, State Manager, View Handler, Variable Resolver etc…
Kategorien: JAX 07 · JSF · Java · MyFaces
- Standard für Persistenz in Java; Teil von EJB 3.0 (JSR220); RI = Toplink Essentials (Glassfish)
- Vereinfachung von EJB 2.0
- Java5 Annotations (und XML…)
- ORM-Frameworks: Eclipse Link (Oracle Toplink), Hibernate (JBoss), OpenJPA & Cayenne (Apache)
Annotationen:
- @Entity für Class, @Generated für Felder
- @Temporal, @OneToOne für eigene Felder und Beziehungen
Spring Framework:
- Apache 2.0 License
- Als eine Art „Abhilfe“ für Java EE (J2EE) -> Einfach!
- Sehr mächtiges Tool (AOP, Transactionsm DI, JDBC), Anbindung an verschiedenFrameworks (JSF, Struts, EJB, Hibernate, AspectJ…)
- Direkter Support vorhanden für Hbernate, OpenJPA, Toplink
- Integration in JSF: JSF View -> JSF Bean (View Controller) -> Service -> DAO/Repository
Anbindung:
- Deklaration eines EntityManager via konkreter Implementierung einer Bean
- Dann: TransactionManager deklarieren, direkte Übergabe an EntityManagerFactory-Bean
Links:
Kategorien: JAX 07 · JSF · Java · MyFaces
Intro:
- Einsatz möglich in JSF 1.2. In JSF 2.0 wird voraussichtlich ein Templating-Ansatz von Haus aus vorhanden sein.
- Verschiedene Komponenten können zusammengefasst als neue Komponente definiert werden, was wesentich schneller funktionieren kann als eine eigenen neue Komponente zu schreiben.
- Nur Doc-Type „xhtml:transitional“ möglich
Konfiguration:
- in web.xml oder über Wildcard (siehe Doku)
Templating:
- Template-Datei wird angelegt, z.B. „/myTemplate.xhtml“
- Aufbau wie JSP-Seite mit HTML-Tags undeinigen Sonderfeldern für die Faclets-Steuerung
- Tag: „<ui:insert>
- Neue Seiten werden einfach als xhtml-Content angelegt und via faces gerendert. Dabei wird sich, wie in der Content-Datei via Tag „<ui:comosition>“ angegeben, auf das (Master-) Template bezogen.
Komponenten verbinden / neue Komponenten:
- Definition von neuen Komponenten auf Basis der herkömmlichen Komponenten, z.B., „verkleben“ von „h:outputLabel“ und „h:inpuText“.
- xhtml-Datei beschreibt die neue Komponente (im Ordner „WEB-INF“)
- Angabe weiterer Eigenschaften in Definitionsdatei möglich
- Definition einer Taglib für die neue Komponente, z.B. jax.taglib.xml.
- In der Taglib: Angabe des Namespaces, Tagname, Sourcefile etc
- Die Taglib wird anschliessend noch in der web.xml registriert
- Komponente kann nun durch Einbinden des Namespaces via „xmlns:“ in den Content-Files genutzt werden
Kategorien: JAX 07 · JSF · Java · MyFaces
Bean Scopes (in Reihenfolge der Lebensdauer):
- NONE: das Objekt wird bei jedem Zugriff neu angelegt
- REQUEST: das Objek wird beim Start des Request Lifecycles angelegt und wieder entfernt, wenn der Cycle durchlaufen ist
- FLASH: Ein State des Tomahawk-Projektes. Objekt wird auf Anweisung in den Komponentenbaum mit aufgenommen und bleibt bis zum nächsten Request erhalten. Bleib also auf der „gleichen“ Seite und noch genau bis zur nächsten Seite erhalten. Field muss mit „t:saveState“ in den Flash-Fokus gehoben werden.
- DIALOG: Verschiedene Komponentenbibliotheken implemetieren eine Variante, die Objekte zwischen 2 definierten Punkten leben lassen. U.a. erfüllen Trinidad und Shale diese Technik. Bsp: „s:conversationStart“ / „s:conversationEnd“
- SESSION: Statis bleiben genau während der (per Coockie) gespeicherten Session erhalten. Dies ist allerdings extrem speicherineffizient.
- APPLICATION: Zentrale Settings, Basisdaten, für alle Benutzer identisch
Kategorien: JSF · Java · MyFaces
Java als plattformunabhängige Programmiersprache unterstützt im Package java.net unmittelbar die Socket-Programmierung. Das zeigt die Betriebssystemunabhängigkeit des Socket-Konzeptes. Die Implementierung der Sockets für die verschiedenen Plattformen (Linux, Windows, Spezialsysteme) erfolgt in der Klassenbibliothek der virtuellen Maschine.
Die Klassen für die Socket-Programmierung sind Socket und ServerSocket. Folgendes Kurzbeispiel zeigt die Verwendung:
ServerSocket serverSocket = new ServerSocket(port);
//Serversocket mit bestimmter Portnummer erstellen
while(true) {
Socket clientSocket = serverSocket.accept();
//auf Anfragen warten
InputStream input = clientSocket.getInputStream();
//InputStream-Objekt öffnen
int data = input.read();
//Daten lesen
clientSocket.close();
//Verbindung schließen
}
Kategorien: Container · Java