# EJBException: Invalid invocation of Local interface



## Gast (17. Nov 2006)

hallo,

ich hab eine EJB 3.0 Anwendung geschrieben, die ich auf dem JBoss AS als JAR-File deploye. Das Deployment verläuft Fehlerlos, wenn ich aber versuche den client zu starten bekomme ich folgende Fehlermeldung:

```
[color=orange]
javax.ejb.EJBException: Invalid invocation of local interface (null container)
	at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:75)
	at $Proxy0.getText(Unknown Source)
	at de.einsundeins.ccsys.client.CompressedClient.main(CompressedClient.java:17)
```
[/color]

Sowohl der JBoss als auch das Eclipse Project laufen in der selben JVM.
Was kann das sein?

TextBean.class

```
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import org.jboss.annotation.ejb.RemoteBinding;
import de.einsundeins.ccsys.util.DBConnection;
import de.einsundeins.ccsys.interfaces.*;


@Stateless
//@Remote({TextRemote.class})
//@RemoteBinding (jndiBinding="CompressedApp/TextBean/remote")
@Local(TextHome.class)
@Remote(TextHome.class)
public class TextBean implements TextHome, TextRemote {
	
	private static final String QRY_TEXT_SEL = "select text.data from textandbinary.text LIMIT 100";
	
	
	public String getText() {
		
	
		try {
			Connection ConMySQL = DBConnection.dbMysql(DBConnection.MySQLURL);
			PreparedStatement prepStmt = ConMySQL.prepareStatement(QRY_TEXT_SEL);
			ResultSet rs = prepStmt.executeQuery();
		    String text = "";
		    
			while(rs.next()){
			    text = text + rs.getString("data");
			}
			return text;
		}
		 catch(ClassNotFoundException ex){
			ex.printStackTrace();
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}
}
```

Client Klasse:

```
package de.einsundeins.ccsys.client;

import de.einsundeins.ccsys.interfaces.*;
import javax.naming.InitialContext;


public class CompressedClient {
	
	public static void main(String args[]){
		
	     try{
	    	 InitialContext ctx = new InitialContext();
	    
	    	 TextHome home = (TextHome)ctx.lookup("TextBean/local");
	    	 //TextRemote remote = (TextRemote)ctx.lookup("TextBean/remote");
	    	 
	    	 System.out.println(home.getText());
	    	 
	     } 
	     catch(Exception e){ 
	    	 e.printStackTrace();
	     }
	}
}
```

Local Interface:

```
package de.einsundeins.ccsys.interfaces;

public interface TextHome{

	public String getText();
}
```

Ich hab keine Ahnung woran das noch liegen und bin für jede Hilfe dankbar.

Gruss
Markus


----------



## SlaterB (17. Nov 2006)

kurze Suche bei google,

hilft folgendes?
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3942105
http://forum.java.sun.com/thread.jspa?threadID=734690&tstart=30
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3972197#3972197


----------



## Gast (17. Nov 2006)

vielen Dank, ich hatte auch bei jboss.com gesucht aber seltsamer weise nix gefunden. 

Ich dachte, wenn so wohl der Server als auch das Eclipse-Project die gleichen JRE's verwenden ist auch die JVM die selbe aber offenbar nicht.

dann muss ich halt das Remote Interface verwenden!

Mein eigentliches Problem, dreht sich um die Socketkomprimierung. Das soll heißen, dass ich mit meiner EJB 3.0 Anwendung verschiedene Text Daten aus einer MySQL Datenbank heraus extrahiere die ich in komprimierter Form zurück bekommen will.
Dafür hab ich mir die Compression Klassen aus dem "org.jboss.test.jrmp.ejb" package heruntergeladen und die jboss.xml datei entsprechend konfiguriert und alles zusammen mit der EJB Anwendung deployt. Das ganze hatte ich bisher immer mit dem Remote Interface durchgeführt. Das Deployment und die Ausführung verlaufen Fehlerlos. Allerdings kommen die Daten nicht in komprimierter Form zurück. Wenn ich in der jboss.xml datei einen klassennamen eintrage der garnicht existiert, funktioniert es trotzdem. Es ist fast so als ob der teil garnicht gelesen wird.

Jboss.xml:

```
<?xml version="1.0"?>
<jboss>

    <container-configurations>
        <container-configuration>
            <container-name>Standard Stateless SessionBean</container-name>
            <invoker-proxy-binding-name>stateless-compression-invoker</invoker-proxy-binding-name>
            <container-invoker-conf>
                <Optimized>true</Optimized>
                <RMIObjectPort>0</RMIObjectPort>
                <RMIClientSocketFactory>de.einsundeins.ccsys.socket.CompressionClientSocketFactory</RMIClientSocketFactory>
                <RMIServerSocketFactory>de.einsundeins.ccsys.socket.CompressionServerSocketFactory</RMIServerSocketFactory>
            </container-invoker-conf>
        </container-configuration>
    </container-configurations>

   <enterprise-beans>
       <session>
           <ejb-name>TextBean</ejb-name>
           <configuration-name>Standard Stateless SessionBean</configuration-name>
           <invoker-bindings>
                <invoker>
                    <invoker-proxy-binding-name>
                        stateless-compression-invoker
                    </invoker-proxy-binding-name>
                    <local-jndi-name>TextBean/local</local-jndi-name>
                </invoker>
            </invoker-bindings>
        </session>
    </enterprise-beans>

    <invoker-proxy-bindings>
        <invoker-proxy-binding>
            <name>stateless-compression-invoker</name>
            <invoker-mbean>jboss:service=invoker,type=jrmp, socketType=CompressionSocketFactory</invoker-mbean>
            <proxy-factory>org.jboss.proxy.ejb.ProxyFactory</proxy-factory>
            <proxy-factory-config>
                <client-interceptors>
                    <home>
                        <interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
                        <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
                        <interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
                        <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
                    </home>
                    <bean>
                        <interceptor>org.jboss.proxy.ejb.StatelessSessionInterceptor</interceptor>
                        <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
                        <interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
                        <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
                    </bean>
                </client-interceptors>
            </proxy-factory-config>
        </invoker-proxy-binding>
    </invoker-proxy-bindings>

</jboss>
[\code]

Wenn du mir dabei helfen könntest, wäre toll.

Wenn nicht, trotzdem vielen Dank.
```


----------



## SlaterB (17. Nov 2006)

ach du Schande, gibt doch ein JBoss-Forum? 
mit 20 Unterkategorien die alle nach JBoss klingen und alle gut besucht sind,
zu englisch?


----------



## Gast (17. Nov 2006)

ich weiß, da hab ich auch schon gepostet aber noch nix bekommen die haben sich wahrscheinlich genau das gleiche gedacht wie du....ach du schande.


----------



## Gast (17. Nov 2006)

Vielleicht liegt es aber auch an meiner Englischen Ausdrucksweise die ist auch nicht gerade die beste. Wenn du willst kannst du es dir ja mal angucken da findest du die komplette Problematik mit quelltext. 
Folgender Link:

[Link]http://www.jboss.com/index.html?module=bb&op=viewforum&f=214[/Link]


----------



## Gast (17. Nov 2006)

Der Titel des Beitrags ist "Compression Socket".


----------

