Java-Tipp: MIME-Type einer Datei (einfacher Weg)
4 Kommentar(e). Veröffentlicht von Christian Ullenboom am Freitag, August 31, 2007.public static String getMIMEType( File file )
{
if ( !file.exists() )
throw new IllegalArgumentException( "File does not exit!" );
if ( file.isDirectory() )
return "directory"
try
{
return file.toURI().toURL().openConnection().getContentType();
}
catch ( IOException e )
{
throw new IllegalArgumentException( e.getMessage() );
}
}
Use JavaMail API to reveive all Google mails
6 Kommentar(e). Veröffentlicht von Christian Ullenboom am Mittwoch, August 29, 2007.package com.tutego.insel.mail;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.ContentType;
import javax.swing.JOptionPane;
public class GetEMails
{
public static void getMail( final Properties props ) throws Exception
{
Session session = Session.getInstance( props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication( props.getProperty( "mail.pop3.user" ),
props.getProperty( "mail.pop3.password" ) );
}
} );
session.setDebug( true );
Store store = session.getStore( "pop3" );
store.connect();
Folder folder = store.getFolder( "INBOX" );
folder.open( Folder.READ_ONLY );
Message message[] = folder.getMessages();
for ( int i = 0; i < message.length; i++ )
{
Message m = message[i];
System.out.println( "-------------------------\nNachricht: " + i );
System.out.println( "Von: " + Arrays.toString(m.getFrom()) );
System.out.println( "Betreff: " + m.getSubject() );
System.out.println( "Gesendet am: " + m.getSentDate() );
System.out.println( "Content-Type: " + new ContentType(m.getContentType()) );
if ( m.isMimeType("text/plain") )
System.out.println( m.getContent() );
}
folder.close( false );
store.close();
}
public static void main( String[] args ) throws Exception
{
Properties props = new Properties();
props.setProperty( "mail.pop3.host", "pop.gmail.com" );
props.setProperty( "mail.pop3.user", JOptionPane.showInputDialog( "user" ) );
props.setProperty( "mail.pop3.password", JOptionPane.showInputDialog( "pass" ) );
props.setProperty( "mail.pop3.port", "995" );
props.setProperty( "mail.pop3.auth", "true" );
props.setProperty( "mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory" );
getMail( props );
}
}
Labels: Insel
Inselupdate: JMX mit RMI-Adaptor
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, August 28, 2007.Für die Anbildung an den JMX-Server dient nicht nur die JConsole, sondern verschiedene andere Wege sind denkbar, etwa über HTTP oder über einen eigenen Client, der über RMI kommuniziert.
JMXConnectorServer für den Server
Zur Veröffentlichung der MBeans über RMI ist der JMXConnectorServer verantwortlich. Damit die MBeans an die RMI-Registry gebunden werden, wird eine besondere URL verwendet, die den Service genau beschreibt. Die JMXServiceURL hat den allgemeinen Aufbau:
service:jmx:<protocol>://[[[<host>]:<port>]/<path>]
Vor dem Start des Programms muss die RMI-Registry für Anmeldungen bereit sein; da unser Programm auf dem gleichen Rechner arbeitet, starten wir den RMI-Namensdienst selbst.
LocateRegistry.createRegistry( 1099 );
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
String url = "service:jmx:rmi:///jndi/rmi://localhost/maze"
JMXConnectorServer connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(
new JMXServiceURL( url ), null, server );
connectorServer.start();
ObjectName name = new ObjectName( "com.tutego.insel.jmx:type=Maze" );
MazeMBean maze = new Maze();
server.registerMBean( maze, name );
JOptionPane.showMessageDialog( null, "Ende" );
System.exit( 0 );
JConsole mit Remote-Connection
Mit der JConsole könnten wir nun Verbindung aufnehmen, in dem unter Remote Connection die URL service:jmx:rmi:///jndi/rmi://localhost/maze Einsatz findet.
JMXConnector für den Client
Auf der Clientseite gibt es mit JMXConnector den Gegenspieler zum JMXConnectorServer. Das Objekt liefert uns mit getMBeanServerConnection() ein MBeanServerConnection-Objekt, was sozusagen die Repräsentation des MBean-Servers MBeanServer auf der anderen Seite entspricht (genauso genommen gilt für die Schnittstellen: MBeanServer extends MBeanServerConnection). Über getAttribute() lassen sich dann zum Beispiel Properties erfragen.
JMXServiceURL u = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://localhost/maze" );
JMXConnector c = JMXConnectorFactory.connect( u );
MBeanServerConnection mbsc = c.getMBeanServerConnection();
ObjectName name = new ObjectName( "com.tutego.insel.jmx:type=Maze" );
System.out.println( mbsc.getAttribute( name, "MaxNumberOfPlayers" ) );
Schnittstelle und Klasse für die MBean
package com.tutego.insel.jmx;
public interface MazeMBean
{
void setMaxNumberOfPlayers( int numberOfPlayers );
int getMaxNumberOfPlayers();
void dragonAlarm();
}
package com.tutego.insel.jmx;
public class Maze implements MazeMBean
{
private int numberOfPersons;
public void setMaxNumberOfPlayers( int numberOfPersons )
{
this.numberOfPersons = numberOfPersons;
}
public int getMaxNumberOfPlayers()
{
return numberOfPersons;
}
public void dragonAlarm()
{
System.out.println( "Heul. Huhuhuhu." );
}
}
JIDE Common Layer - Frische Swing-Komponenten
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Freitag, August 03, 2007.Form the homepage:"JIDE Common Layer has nearly 100k lines of code and over 30 components and utilities. It has been part of JIDE commercial products since 2002 so the quality and stability are quite high. You can run a webstart demo from the link below to see it in action."
JIDE is dual-licensed: GPL and free commercial license.
Labels: Open Source, Swing
TeX-Formulate in Webseiten mit jsMath
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Donnerstag, August 02, 2007.http://www.math.union.edu/~dpvc/jsMath/ ist eine Layout-Engine, die TeX-Formulare in Webseiten rendert. Dabei werden nicht, wie bei anderen Ansätzen, Grafiken generiert, sondern die Ausdrücke mit CSS positioniert. Damit skaliert das Ganze schön. Das Ergebnis ist beeindruckend und die Engine wird auch von einigen Wiki-Systemen verwendet. Einige Beispiele: Examples of jsMath. Im Interactive jsMath lab kann man Formen eingeben und es kommt HTML raus, was man nur noch zusammen mit dem CSS auf die eigene Webseite setzen muss. Aus x_i^2 wird etwa:
<SPAN CLASS="typeset"><nobr><span class="scale"><span class="icmmi10">x</span><span style="position: relative; top:0.372em;"><span class="size2"><span class="icmmi10">i</span></span><span class="spacer" style="margin-left:0.05em"></span></span><span style="position: relative; margin-left:-0.260em; top:-0.362em;"><span class="size2"><span class="icmr10">2</span></span><span class="spacer" style="margin-left:0.05em"></span></span><span class="blank" style="height:1.331em;vertical-align:0.908em"></span></span></nobr></SPAN>
Jetzt fehlen nur noch jsMath.js und, falls etwa Summen-Zeichen oder sonstiges Sonderzeichen verwendet werden, im fonts-Ordner die TeX-Fonts.
Labels: Open Source

