JBoss Community

Mini (Stateful) EJB 3 Example using JBoss and Eclipse

created by Phi GF in EJB3 Development - View the full discussion

Hello Community

 

(appologise I am new to JBoss 3.0)

 

I am looking for a simple EJB 3.0 Example using a Stateful Bean to demonstrate the components and concepts of an application server. I have searched several forums and googled a lot, but I have found mostly solutions to Problems I did not encounter. (I have an EJB 2 Example, which is not applicable, because my trainees will work on EJB 3.0 or 3.1 later.)

 

Here my configuration:

 

 

JBoss Application Server 7.0.1 final

OS: Linux Ubuntu 64 Bit (10.10)

Eclipse 64 Bit J2EE (indigo)

Java 1.6.0_26

 

 

I have 2 Projects in my Eclipse Workbench (a Server + a Client). The Server contains 2 classes:

 

MyTimerRemote.java:

 

package ch.my.timer.server;

import javax.ejb.Remote;

 

@Remote

public interface MyTimerRemote {

  void  setRemainingSecs(int seconds);

  float getRemainingSecs();

}

 

and MyTimer.java (also on the server):

 

package ch.my.timer.server;

 

import javax.ejb.Stateful;

 

 

/**

* Session Bean implementation class MyTimer

*/

@Stateful

public class MyTimer implements MyTimerRemote {

 

    public MyTimer() {

        this.endTimePoint = System.currentTimeMillis();

    }

 

    private long endTimePoint; // timestamp in milliseconds

   

    @Override

    public void setRemainingSecs(int seconds) {

        long millis = seconds * 1000;

        long now    = System.currentTimeMillis();

        this.endTimePoint = now + millis;

    }

 

    @Override

    public float getRemainingSecs() {

        long now   = System.currentTimeMillis();

        long diff  = this.endTimePoint - now;

        float secs = (float) (diff / 1000.0);

        return secs;

    }

}

 

 

The Client Project contains a simple Test class (MyTimerTest.java):

 

 

package ch.my.timer.client;

 

import java.util.Hashtable;

 

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

 

import  ch.my.timer.server.*;

 

public class MyTimerTest {

  public static void main(String[] args) {

     try {

        new MyTimerTest().top();

     } catch (NamingException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

     }

   }

 

   void top() throws NamingException {

      Hashtable<String, String> env = new Hashtable<String, String>();     

      env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");    

      env.put(Context.PROVIDER_URL, "localhost:1099");     

      env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces" );

      InitialContext ctx = new InitialContext(env);

 

      MyTimerRemote str = (MyTimerRemote) ctx.lookup("java:module/SantisTimer");

    

      str.setRemainingSecs(3);

      float rem = str.getRemainingSecs();

      System.out.println("Remaining: " + rem);

   }

}

 

Starting the server (using "run on server -> JBoss 7.0 Runtime Server, i get the following output:

15:05:06,995 INFO  [org.jboss.modules] JBoss Modules version 1.0.1.GA

15:05:07,394 INFO  [org.jboss.msc] JBoss MSC version 1.0.0.GA

  ...

15:05:11,026 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) Starting deployment of "EJB_Servenull"

15:05:11,146 INFO  [org.jboss.as.jpa] (MSC service thread 1-1) added javax.persistence.api dependency to EJB_Servenull

15:05:11,237 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-4) JNDI bindings for session bean named MyTimer in deployment unit deployment "EJB_Servenull" are as follows:

 

    java:global/EJB_Servenull/MyTimer!ch.my.timer.server.MyTimerRemote

    java:app/EJB_Servenull/MyTimer!ch.my.timer.server.MyTimerRemote

    java:module/MyTimer!ch.my.timer.server.MyTimerRemote

    java:global/EJB_Servenull/MyTimer

    java:app/EJB_Servenull/MyTimer

    java:module/MyTimer

 

15:05:11,434 INFO  [org.jboss.as.server.controller] (DeploymentScanner-threads - 2) Deployed "EJB_Servenull"

 

Starting the client (run as Java Application) I get:

 

javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]

    at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1302)

    at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1382)

    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:579)

    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)

    at javax.naming.InitialContext.lookup(InitialContext.java:392)

    at ch.my.timer.client.MyTimerTest.top(MyTimerTest.java:28)

    at ch.my.timer.client.MyTimerTest.main(MyTimerTest.java:14)

Caused by: java.net.SocketTimeoutException: Receive timed out

    at java.net.PlainDatagramSocketImpl.receive0(Native Method)

    at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:145)

    at java.net.DatagramSocket.receive(DatagramSocket.java:725)

    at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1272)

    ... 6 more

 

Any Ideas? What am I missing?

 

Thanks in advance.

Reply to this message by going to Community

Start a new discussion in EJB3 Development at Community