# Chat-Applet über EJB Message Bean



## M@rty (7. Jan 2008)

Hallo Leute bin am Verzweifeln und hoffe dass mir jemand von euch weiter helfen kann. Das Problem ist hier wie auch in  anderen Foren schon des öfteren aufgetaucht, aber hab alle Vorschläge schon probiert und komm nicht weiter.
Habe mal wieder ein Chat-Applet, welches aber über eine EJB Message Driven Bean läuft in verbindung mit einem JBoss Application Server. Habe das Applet in Eclipse getestet und läuft einwandfrei. Jetzt habe ich jedoch mal wieder das Problem mit dem einbinden. Soll nachher in einer JSP laufen aber bekomme es nicht mal in eine HTML Seite. Habe den Browser auf den neusten Stand von Java gebracht und habe es mit verschieden tags,jar (signiert/unsigniert) und den notationen probiert. Folgend hab ich mal meine HTML Statmants abgedruckt mit den Fehlermeldungen(sind abgetippt da sich die konsole ständig aufgehängt hat(bin ich übrigens auch kurz davor:/
Hoffe ich könnt mir helfen. schon mal Vielen Dank im Vorraus.  

HTML Code(Objekttag):

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Java ChatApplet</title>
</head>
<body>
<h1>Java ChatApplet <h1>



<object classid="java:ChatApplet.class" codetype="application/java-vm" width="600"
 height="400"></object>
</p>
</body>
</html>
```
UND

```
HTML Code (APLLET-Tag mit JAR):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Java-Applet</title>
</head>
<body>
<applet code="ChatApplet.class" width="100" height="100" archive="chat.jar"> 
</applet> 
</body>
</html>
```
UND

```
HTML Code (APLLET-Tag mit JAR):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Java-Applet</title>
</head>
<body>
<applet code="ChatApplet.class" width="100" height="100"> 
</applet> 
</body>
</html>
```
FehlerMeldung:
Applet ChatApplet .notinited

```
java.lang.NoClassDefFoundError: ChatApplet (wrong name: chat/ChatApplet) 
   at java.lang.ClassLoader.defineClass1(Native Method) 
   at java.lang.ClassLoader.defineClass(Unknown Source) 
   at java.security.SecureClassLoader.defineClass(Unknown Source) 
   at sun.applet.AppletClassLoader.findClass(Unknown Source) 
   at java.lang.ClassLoader.loadClass(Unknown Source) 
   at sun.applet.AppletClassLoader.loadClass(Unknown Source) 
   at java.lang.ClassLoader.loadClass(Unknown Source) 
   at sun.applet.AppletClassLoader.loadCode(Unknown Source) 
   at sun.applet.AppletPanel.createApplet(Unknown Source) 
   at sun.plugin.AppletViewer.createApplet(Unknown Source) 
   at sun.applet.AppletPanel.runLoader(Unknown Source) 
   at sun.applet.AppletPanel.run(Unknown Source) 
   at java.lang.Thread.run(Unknown Source)
```
Wenn ich in den tags die Notation (Package chat) wiefolgt eingebe, kommt:

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Java ChatApplet</title>
</head>
<body>
<h1>Java ChatApplet <h1>



<object classid="java:chat.ChatApplet.class" codetype="application/java-vm" width="600"
 height="400"></object>
</p>
</body>
</html>
```
Oder

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Java-Applet</title>
</head>
<body>
<applet code="chat.ChatApplet.class" width="100" height="100" archive="chat.jar"> 
</applet> 
</body>
</html>
```
Fehler:

```
java.lang.ClassNotFoundException :chat.ChatApplet.class
at java sun.appletAppletClassLoader.findClass.....
...usw
Caused by:java.io.FileNotFoundeException: C:\dok....
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(Unknown Source)
	at java.io.FileInputStream.<init>(Unknown Source)
	at sun.net.www.protocol.file.URLConnection.connect(Unknown Source)
	at sun.net.www.protocol.file.URLConnection.getInputStream(Unknown Source)
	at sun.applet.ClassLoader.getBytes(US)
	at sun.applet.ClassLoader.access$100(US)
	at sun.applet.ClassLoader$1.run(US)
	at java.security.AccessController.doPrivileged(Native Method)
	...10More
```
Hoffe hab euch nicht mit HTML erschlagen.
Vermute hat was mit den package zu tun da andere kleine applets funktionieren[/code]


----------



## M@rty (8. Jan 2008)

Habe es jetzt mit den HTML-Konverter von Java probiert und bin zu keinem positiven Ergebniss gekommen. Das Applet muss zwar eine Verbindung zum server aufbauen aber die grafischen Element müssten doch trotzdem angezeigt werden.


----------



## M@rty (8. Jan 2008)

Hallo ich glaube mittlerweile dass es am Code liegt. Habe es jetzt in eine JSP eingebunden und als  exportierte .war  datei auf meinen Localen Tomcat/JBoss server geladen und funktioniert immer noch nicht. Kleinere Applets Bsp. Applets aus meinen Übungen laufen im html Fenster.Haben allerdings kein Package.
Vermute mal dass es am Code liegt, es ist nur schwer einen Fehler zu finden wenn es in der Entwicklungsumgebung funktioniert.
Werde ihn mal posten, wäre nett wenn ein oder andere mal drüberschauen könntet und wenn euch ein Fehler auffällt es posten könntet. Ich werde dann mal weiter suchen oder es eventuell mit einer externe-Anwendung+jsp oder Java Webstart versuchen. 
Vielen Dank und hoffe es wird nicht zu unübersichtlich:


```
package chat;


import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.swing.*;
import java.awt.*; 
import java.awt.event.*;
import java.applet.*;
import java.util.Properties;

public class ChatApplet extends Applet implements ActionListener
{
	// ??? Gesetzt da Warhinweis kam 
	private static final long serialVersionUID = 1L;
	
	// Verbindungsvarialblen für Jboss/Message-Driven-Bean
	private Session session;
	private MessageProducer sender;
	private Connection connect;
	
	

	
// Textobjekte in Panel 
	TextField inputfield;
	TextArea outputarea;
	JLabel playername;			// Label mit Spielername
	
	// Chat Instanz erzeugen und init Methode aufrufen wg. Problem mit Browser
	

	public void init()
	{
		//Varialble für Playername später angleichen//
		
		String user;
		user = "Heike";
		
		
		inputfield = new TextField();
		inputfield.addActionListener(this);
			
		outputarea = new TextArea();
		playername = new JLabel(user);
		outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
		outputarea.setEditable(false);

		this.setLayout(new BorderLayout());
		this.add("North", inputfield);
		this.add("Center", outputarea);
		this.add("South", playername);

		this.setBackground(Color.lightGray);
		this.setForeground(Color.black);
		inputfield.setBackground(Color.white);
		outputarea.setBackground(Color.white);
		
		

	}	


	public void start()
	{
	
		try {
		
			//Verbindungsangaben für JBoss bzw. Message Driven Bean
			Properties p = new Properties();
			p.put(Context.INITIAL_CONTEXT_FACTORY,
				"org.jnp.interfaces.NamingContextFactory");
			p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
			p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
		
		
			InitialContext ctx = new InitialContext(p);
	
			ConnectionFactory factory = (ConnectionFactory) ctx
					.lookup("ConnectionFactory");
	
			javax.jms.Queue queue = (javax.jms.Queue) ctx
					.lookup("queue/testQueue");
	
			connect = factory.createConnection();
	
			session = connect.createSession(false, Session.AUTO_ACKNOWLEDGE);
	
			sender = session.createProducer(queue);
	
			new Empfaenger();
	
			String anmelden = "NEW:" + playername.getText();
			TextMessage msg = session.createTextMessage(anmelden);
			msg.setStringProperty("MessageFormat", "ChatMessage");
			sender.send(msg);


		} catch (Exception ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Fehler",
					JOptionPane.ERROR_MESSAGE);
		  }
		
	}
	


// Nachricht wird vom Textfeld eingelesn und an Server versendet zusammen mit dem Namen (hier Heike/später Playername)
	public void actionPerformed(ActionEvent evt){
		
		if (session != null) 
		{
					try {
						String text = playername.getText() + ":"
								+ inputfield.getText();
		
						TextMessage msg = session.createTextMessage(text);
						msg.setStringProperty("MessageFormat", "ChatMessage");
						sender.send(msg);
		
						inputfield.setText("");
					} catch (Exception ex) {
						JOptionPane.showMessageDialog(this, ex.getMessage(), "Fehler",
								JOptionPane.ERROR_MESSAGE);
					}
			
			}
	}	


class Empfaenger implements javax.jms.MessageListener {
	public Empfaenger() {
		try {
			Properties p = new Properties();
			p.put(Context.INITIAL_CONTEXT_FACTORY,
				"org.jnp.interfaces.NamingContextFactory");
			p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
			p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
			
			
			InitialContext ctx = new InitialContext(p);
			ConnectionFactory factory = (ConnectionFactory) ctx
					.lookup("ConnectionFactory");

			javax.jms.Topic topic = (javax.jms.Topic) ctx
					.lookup("topic/testTopic");

			Connection connect = factory.createConnection();

			Session session = connect.createSession(false,
					Session.AUTO_ACKNOWLEDGE);

			MessageConsumer receiver = session.createConsumer(topic);
			receiver.setMessageListener(this);
			connect.start();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}


						public void onMessage(Message message) {
								try {
									TextMessage text = (TextMessage) message;
									String msg = text.getText();
									outputarea.append(msg + "\r\n");
									outputarea.setCaretPosition(inputfield.getText().length());
									

								} catch (Exception ex) {
									ex.printStackTrace();
								}
	
						}}



// Verbindung schließen

public void stop() {
	try {
		if (connect != null) {
			String abmelden = "DELETE:" + playername.getText();
			TextMessage msg = session.createTextMessage(abmelden);
			msg.setStringProperty("MessageFormat", "ChatMessage");
			sender.send(msg);
			connect.close();
		}
	} catch (Exception ex) {
		ex.printStackTrace();
	}
	System.exit(0);
}

}
```


----------



## M@rty (10. Jan 2008)

Habe die Grafiken element jetzt zu laufen bekommen. Wenn ich jetzt aber den rest des Code aktiviere kommt folgender fehler:

```
java.lang.NoClassDefFoundError: javax/jms/Message
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
	at java.lang.Class.getConstructor0(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at sun.applet.AppletPanel.createApplet(Unknown Source)
	at sun.plugin.AppletViewer.createApplet(Unknown Source)
	at sun.applet.AppletPanel.runLoader(Unknown Source)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

das müsste doch eigentlcih der Message Listener der Klasse Empfaenger sein der probleme macht
```


----------

