So kann eine Exception ein trauriges Gesicht machen
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Samstag, März 31, 2007.try { ... }
catch ( NumberFormatException ó_ò ) { ... }
PHP in purem Java mit Quercus
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Freitag, März 23, 2007.Quercus (http://quercus.caucho.com/) implementiert eine PHP 5 Engine in purem Java. Die Software ist unter LGPL und stammt von Caucho, die auch den performanten Resin-Server implementieren. Laut Herstellerangaben laufen bisher
- DokuWiki, Dragonfly CMS, Drupal, Gallery2, Joomla, Mambo, Mantis, MediaWiki, Phorum, phpBB, phpMyAdmin, PHP-Nuke, Wordpress, XOOPS (http://quercus.caucho.com/quercus-3.1/doc/quercus-list-of-applications.xtp)
Von den PHP-Funktionen fehlen bisher:
- call_user_method, call_user_method_array, get_declared_interfaces, interface_exists, property_exists
- date_default_timezone_get, date_default_timezone_set, date_sunrise, date_sunset, idate, localtime, strptime
- debug_print_backtrace, restore_exception_handler, set_exception_handler
- exif_read_data, exif_thumbnail, exif_tagname
- disk_free_space (stub), disk_total_space (stub), readlink (stub), umask (stub)
- register_tick_function, unregister_tick_function
- bind_textdomain_codeset (stub)
- headers_list, setrawcookie
- ob_iconv_handler
- imagecolorclosesthwb, imagecolorset, imagecolorstotal, imageftbbox, imagefttext, imagegammacorrect, imageinterlace, imagelayereffect, imageloadfont, imagepalettecopy, imagepsbbox, imagepscopyfont, imagepsencodefont, imagepsextendfont, imagepsfreefont, imagepsloadfont, imagepsslantfont, imagepstext, imagerotate, iptcembed, image2wbmp, jpeg2wbmp, png2wbmp, imagecreatefromgd2, imagecreatefromgd2part, imagecreatefromgd, imagegd2, imagegd
- ezmlm_hash
- mhash_keygen_s2k
- connection_aborted, connection_status, connection_timeout, __halt_compiler, highlight_file, highlight_string, ignore_user_abort, php_check_syntax, php_strip_whitespace, show_source, sys_getloadavg, time_nanosleep, time_sleep_until
- mysqli_debug, mysqli_disable_reads_from_master, mysqli_disable_rpl_parse, mysqli_info, mysqli_kill, mysqli_master_query, mysqli_report, mysqli_rpl_parse_enabled, mysqli_rpl_probe, mysqli_rpl_query_type, mysqli_send_long_data, mysqli_send_query, mysqli_server_end, mysqli_server_init, mysqli_ssl_set, mysqli_stmt_send_long_data, mysqli_thread_id, mysqli_thread_safe
- dns_get_record, inet_ntop, inet_pton, long2ip, pfsockopen, socket_get_status, socket_get_blocking, socket_get_timeout
- assert_options, dl (stub), get_current_user (stub), get_included_files, get_magic_quotes_gpc, get_magic_quotes_runtime, get_required_files, getopt, getrusage, ini_restore, memory_get_usage, php_ini_scanned_files, php_logo_gid, phpcredits, putenv, restore_include_path, set_magic_quotes_runtime, zend_logo_gid, zend_version
- proc_close, proc_get_status, proc_nice, proc_open, proc_terminate
- stream_bucket_append, stream_bucket_make_writeable, stream_bucket_new, stream_bucket_prepend, stream_filter_append, stream_filter_prepend, stream_filter_register, stream_filter_remove, stream_get_filters, stream_get_meta_data, stream_select, stream_set_blocking, stream_set_timeout (stub), stream_set_write_buffer (stub), stream_socket_accept, stream_socket_server, stream_socket_client, stream_socket_enable_crypto, stream_socket_get_name, stream_socket_pair, stream_socket_recvform, stream_socket_sendto, stream_socket_server
- xml_error_string, xml_get_current_byte_index, xml_get_current_column_number, xml_get_current_line_number, xml_get_error_code, xml_set_external_entity_ref_handler
- und noch ein paar
Aus PHP heraus lassen sich Java-Objekte bauen und auf die gesamte API zugreifen:
<?php
$a = new java("java.util.Date", 1234567);
echo $a->day();
?>
Neu eingeführt in PHP wurde auch das import Schlüsselwort.
Beiträge, die sich mit Quercus beschäftigen und zeigen, wie das MediaWiki und Forums-Software läuft, sind:
- http://blogs.sun.com/alexismp/entry/php_in_glassfish_first_steps, Video: http://blogs.sun.com/alexismp/resource/phpbbingf.html
- 100% Java Quercus PHP engine running in GlassFish Java EE 5 Application Server... http://weblogs.java.net/blog/ludo/archive/2007/03/100_java_quercu.html
- Java and PHP Intermingling? http://www.javalobby.org/java/forums/t91427.html
Labels: Open Source
Inselupdate: Ist eine Zahl mit value % 2 == 1 ungerade?
3 Kommentar(e). Veröffentlicht von Christian Ullenboom am Donnerstag, März 15, 2007.Um mit value % 2 == 1 zu testen, ob value eine ungereade Zahl ist, muss value positiv sein, denn -3 % 2 wertete Java zu -1 aus. Der Test auf ungereade Zahlen wird erst wieder korrekt mit value % 2 != 0.
Insel: Innere Klasse und Serializable
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Donnerstag, März 15, 2007.Werden Exemplare einer nicht statischen inneren Klasse serialisiert, die äußere Klasse implementiert aber nicht Serializable, gibt es einen Fehler, denn intern hält ein Objekt der inneren Klasse einen Verweis auf das Exemplar der äußeren Klasse. Statische innere Klassen machen das nicht, was das Problem mit der Serialisierung lösen kann. Das Datenvolumen kann natürlich groß werden, wenn schlanke nicht-statische innere Serializable-Klassen in einer äußeren Serializable-Klassen liegen, die sehr viele Eigenschaften besitzt.
JAX-WS 2.1 with Spring under Java 6
2 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, März 13, 2007.First you need some jars in your classpath of an web application
- commons-logging.jar
- jaxw-api.jar
- jaxws-rt.jar
- jaxws-spring-1.1.jar
- saaj-api.jar
- saaj-impl.jar
- spring.jar
- stax-ex.jar
- streambuffer.jar
- xbean-spring-2.8.jar
The Jars are from Spring itself, http://geronimo.apache.org/xbean/, https://jax-ws.dev.java.net/ (jax-ws 2.1, JAXWS2.1_nightly.zip) and https://jax-ws-commons.dev.java.net/spring/ (jaxws-spring-1.1.jar). It is although important to place
- jaxb-api.jar
- jaxb-impl.jar
under C:\Programme\Apache Software Foundation\Tomcat 5.5\common\endorsed.
This was the necessary and boring preparation.
Next the Web Service itself
package com.tutego.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class GreeterService
{
@WebMethod
public String greet( String name )
{
return "Hello " + name + "!"
}
}
And web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>SpringWeb</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>jaxws-servlet</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSSpringServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jaxws-servlet</servlet-name>
<url-pattern>/greet</url-pattern>
</servlet-mapping>
</web-app>
The applicationContext.xml follows the suggestions with the namespace.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ws="http://jax-ws.dev.java.net/spring/core"
xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://jax-ws.dev.java.net/spring/core http://jax-ws.dev.java.net/spring/core.xsd
http://jax-ws.dev.java.net/spring/servlet http://jax-ws.dev.java.net/spring/servlet.xsd">
<ws:service id="greeterService"
impl="com.tutego.service.GreeterService" />
<wss:bindings id="jax-ws.http">
<wss:bindings>
<wss:binding url="/greet" service="#greeterService" />
</wss:bindings>
</wss:bindings>
</beans>
Now you can consume your WS. If your Web-Context is SpringWeb use http://localhost:8080/SpringWeb/greet?wsdl. Enjoy it!
Labels: Spring
Spring in einer Web-Applikationen nutzen - so einfach ist das
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, März 13, 2007.Mit dem WTP ist es eine Sache von Minuten.
Lege ein Dynamic-Web-Projekt an. Nenne es etwa spring.
Aus dem Spring-all-in-one-glücklich.zip kopiere spring.jar und common-loggings.jar in das WEB-INF/lib.
Lege in WEB-INF eine Datei applicationContext.xml.
Setze in die Datei:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans><bean id="date" class="java.util.Date" />
</beans>
Setzte in WEB-INF/web.xml die Zeilen:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param><listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
Schreibe eine index.jsp
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@page import="org.springframework.context.ApplicationContext"%>
<%
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
%><%= appContext.getBean("date") %>
Das war's. Unter http://localhost:8080/spring/ gibt's dann das Datum.
Labels: Spring
Swing Application Framework und Swing Databinding -- eine Aufzeichnung
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Freitag, März 09, 2007.Labels: Open Source
Aktuelle Closure-Varianten (BGGA, CICE, FCM) im Vergleich
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Mittwoch, März 07, 2007.- Gilad Bracha, Neal Gafter, James Gosling, Peter von der Ahé (BGGA)
- Bob Lee, Doug Lea, and Josh Bloch (CICE)
- Stefan Schulz (FCM)
Der Blog-Eintragt http://www.jroller.com/page/scolebourne?entry=java_7_comparing_closure_proposals vergleicht Szenarien mit den drei bisherigen Vorschlägen.
Find all hyperlinks in a text file
2 Kommentar(e). Veröffentlicht von Christian Ullenboom am Freitag, März 02, 2007.FileChannel fc = new FileInputStream( "c:/a.html" ).getChannel();
ByteBuffer byteBuf = fc.map( FileChannel.MapMode.READ_ONLY, 0, fc.size() );
CharBuffer charBuf = Charset.defaultCharset().newDecoder().decode( byteBuf );
Pattern pattern = Pattern.compile( "<a.*?href=[\"']([^\"]*?)[\"'].*?>", Pattern.CASE_INSENSITIVE );
Matcher m = pattern.matcher( charBuf );
while ( m.find() )
System.out.println( m.group( 1 ) );
fc.close();
Axis2/XFire Zoff. Der Gewinner: JAXWS 2.1?
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Freitag, März 02, 2007.Im Moment tobt der Kampf zwischen Axis2 und XFire um die Performance-Krone. Einige Benchmarks zeigen Axis2 vorne, doch das wohl nur, weil eigentlich XML-Bindings-Frameworks (JAXB bei XFire, ADB (Axis2 Data Binding) bei Asix2), also vergleichen werden, und nicht der Serialisierer selbst. Andere wiederum erfreuen sich über die Rechtschreibfehler in der Axis2-Doku bis zur Frustration:
- isOneHanlder
boolean isOneHanlder
this is want if the phaseFirst and phaseLst same hanlder that is for this phase there is only one phase - This send the SOAP Message to other SOAP nodes and this alone write the SOAP Message to the wire. Out flow must be end with one of this kind.
- cloneOMElement
public OMElement cloneOMElement()
Clones this element. Since both elements are build compleletely, you will lose the differed building capability.
Returns:
Returns OMElement.
Im Moment sieht gar nicht so schlecht für die Referenzimplementierung aus, insbesondere seit der neuen Version JAXWS 2.1 FCS. Die Performance-Ergebnisse sind ausgezeichnet und Spring-Support gibt's auch. Was will man mehr?
Einiges mehr zur Debatte:
- http://wso2.org/library/588
- http://jroller.com/page/fate?entry=dodgy_benchmarks
- http://www.bloglines.com/blog/sanjiva?id=176
- http://weblogs.java.net/blog/kohsuke/archive/2007/02/jaxws_ri_21_ben.html
- http://blogs.sun.com/alexismp/entry/why_jax_ws_isn_t
Labels: Open Source
Unter http://swinglabs.org/demos.jsp gibt's ein Demo (JNLP) aller zentraler SwingX-Komponenten. Im Incubator ist auch einiges interssantes dabei -- eine JXSplitButton Demo habe ich immer schon vermisst.
JNLP-Demos:
- Column Group
- Quick Searcher Panel
- ScrollPane Selector
- WhiteBoard
- ListView
- SwingxTris
- AsynchronousFilter
- Custom Column Control
- TaskPaneRenderer
- JXCheckList
- SwingXtreme Renderer
- JXTabbedPane Demo
- JXLabel Demo
Labels: Open Source
