0 Replies Latest reply on May 23, 2006 5:50 PM by David Zarfl

    Problems deplyoing a Service POJO

    David Zarfl Newbie

      Hi all,
      I'm doing a MUD game for uni where the central class would be World, a Service POJO that manages all the game logic and that the clients connect to. The problem is that I can't seem to deploy it as a Bean.

      Here's the code for the Management Interface:

      package functional;
      import org.jboss.annotation.ejb.Management;
      public interface WorldManagement
       //for testing
       String tell();
       void create() throws Exception;
       void start() throws Exception;
       void stop() throws Exception;
       void destroy() throws Exception;

      Here's the implementing class:
      package functional;
      import java.util.Vector;
      import javax.ejb.Remote;
      import org.jboss.annotation.ejb.Service;
      import org.jboss.annotation.ejb.RemoteBinding;
      import org.jboss.annotation.ejb.Management;
      import javax.persistence.*;
      import java.io.Serializable;
      @Service (objectName="SE:service=world")
      //@RemoteBinding (jndiBinding="SE/World")
      public class World implements WorldManagement,Serializable{//, WorldRemote{
       //private static final long serialVersionUID;
       private String createdBy;
       private String description;
       private String name;
       private Room startingRoom;
       private Vector<Room> rooms;
       public World(String createdBy, String description, String name, Vector<Room> rooms){
       this.name = name;
       this.description = description;
       this.createdBy = createdBy;
       this.rooms = rooms;
       public boolean addRoom(Room room){
       return rooms.add(room);
       public boolean removeRoom(Room room){
       return rooms.remove(room);
       * @return The description of the new Room
       public String move(Player player, Exit exit){
       String temp = "This is a default debug message.";
       if(exit == null)
       return "There is no Exit in this direction.";
       temp = "You used a key to open the door.\n";
       return "You need a key you don't have to open this door.";
       if(movePlayer(player, player.getCurrentRoom(), exit.getOtherRoom(player.getCurrentRoom()))){
       temp += player.getCurrentRoom().getDescription();
       return temp;
       //default only, should never be reached
       return temp;
       private boolean movePlayer(Player player, Room from, Room to){
       if(from.remove(player) && to.add(player)){
       return true;
       return false;
       public boolean addPlayer(Player player){
       return startingRoom.add(player);
       public boolean removePlayer(Player player){
       return player.getCurrentRoom().remove(player);
       public String tell(){return "test";}
       * @return Returns the createdBy.
       public String getCreatedBy() {
       return createdBy;
       * @return Returns the description.
       public String getDescription() {
       return description;
       * @return Returns the name.
       public String getName() {
       return name;
       public boolean kill(livingThing part){
       //in case of Player GUI Update
       return part.getCurrentRoom().remove(part);
       public void initiateBattle(livingThing fighter1, livingThing fighter2){
       Battle battle = new Battle(fighter1, fighter2);
       livingThing toKill = battle.start();
       public void initiateTrade(Player player1, Player player2){
       public boolean pickUp(Player player, String item){
       return true;
       public boolean drop(Player player, String item){
       return true;
       * @param The player to update
       * @return The Strings concerning the things that changed for the player
       public Vector<String> getGUIUpdate(Player player){
       return null;
       //Lifecycle methods, no functionality yet
       public void create() throws Exception
       System.out.println("World - Creating");
       public void start() throws Exception
       System.out.println("World - Starting");
       public void stop()
       System.out.println("World - Stopping");
       public void destroy()
       System.out.println("World - Destroying");

      and here's the ant file:

      <project name="SE" default="all" basedir=".">
       <property name="src.dir" value="${basedir}/src"/>
       <property name="build.dir" value="${basedir}/build"/>
       <property name="deploymentdescription" value="${basedir}/deploymentdescriptors"/>
       <!-- please edit this to your jboss installation -->
       <property name="jbossDeployDir" value="/Programme/jboss-4.0.4.GA/server/default/deploy"/>
       <property name="earFile" value="SE.ear"/>
      <!-- The build classpath -->
       <path id="build.classpath">
       <fileset dir="C:\Programme\jboss-4.0.4.GA\client">
       <include name="*.jar"/>
       <fileset dir="C:\Programme\jboss-4.0.4.GA\lib">
       <include name="*.jar"/>
       <!-- Deploy created ear File -->
       <target name="deploy">
       <!-- delete old ear -->
       <delete file="${jbossDeployDir}/${earFile}" quiet="false"/>
       <!-- copy new ear to jboss/deploydir -->
       <copy todir="${jbossDeployDir}">
       <fileset dir="${build.dir}/jar" includes="${earFile}"/>
       <!-- Undeploy created ear File -->
       <target name="undeploy">
       <delete file="${jbossDeployDir}/${earFile}" quiet="false"/>
       <target name="prepare">
       <mkdir dir="${build.dir}"/>
       <mkdir dir="${build.dir}/classes"/>
       <mkdir dir="${build.dir}/jar"/>
       <mkdir dir="${build.dir}/SE"/>
       <mkdir dir="${build.dir}/zip"/>
       <!-- MUST use JDK 1.5 compiler -->
       <target name="compile" depends="prepare">
       <javac destdir="${build.dir}/classes"
       <src path="${src.dir}"/>
       <!-- Package all the EJB classes -->
       <target name="package-ejb" depends="compile">
       <jar jarfile="${build.dir}/jar/SE.jar">
       <fileset dir="${build.dir}/classes">
       <include name="**"/>
       <!-- Creates an ear file containing all
       the modules as well as application.xml. -->
       <target name="assemble-app">
       <jar jarfile="${build.dir}/jar/SE.ear">
       <metainf dir="${deploymentdescription}">
       <include name="application.xml"/>
       <!-- <include name="j-boss.xml"/> -->
       <fileset dir="${build.dir}/jar"
       <delete file="${build.dir}/jar/SE.jar"/>
       <delete dir="${build.dir}/classes"/>
       <!-- Package the source zip file -->
       <target name="assemble-src" depends="prepare">
       <copy todir="${build.dir}/SE">
       <fileset dir="..">
       <include name="SE/**"/>
       <exclude name="**/.svn"/>
       <exclude name="**/build"/>
       <zip destfile="${build.dir}/zip/SE.zip"
       <target name="clean">
       <delete dir="${build.dir}" />
       <target name="all">
       <antcall target="clean" />
       <antcall target="package-ejb" />
       <antcall target="assemble-app" />
       <antcall target="assemble-src" />
       <antcall target="deploy" />

      and here the client trying to access the bean:
      package client;
      import functional.*;
      import java.util.Vector;
      import org.jboss.annotation.*;
      import javax.management.MBeanServer;
      import org.jboss.mx.util.MBeanServerLocator;
      import org.jboss.mx.util.MBeanProxyExt;
      public class Client {
       private static WorldManagement world = null;
       * Diese Methode wird beim Start des Clients aufgerufen.
       public static void main(String[] args) throws Exception{
       MBeanServer server = MBeanServerLocator.locate();
       world = (WorldManagement) MBeanProxyExt.create(
       //Calculator calculator = (Calculator) ctx.lookup("SE/CalculatorBean/remote");
       //System.out.println("1 + 1 = " + calculator.add(1, 1));
       //System.out.println("1 - 1 = " + calculator.subtract(1, 1));
       catch(Exception e){e.getMessage(); e.printStackTrace();}
       //Login login = new Login();
       /*Vector<Item> test = new Vector<Item>();
       Item item1 = new HealthPack(50);
       Item item2 = test.get(test.indexOf(item1));

      When i run the client i get the following error:
      at java.util.AbstractList$Itr.next(AbstractList.java:427)
      at org.jboss.mx.util.MBeanServerLocator.locate(MBeanServerLocator.java:79)
      at org.jboss.mx.util.MBeanServerLocator.locate(MBeanServerLocator.java:92)
      at client.Client.main(Client.java:29)

      The weird thing is that when i deploy the SE.ear file I can see the server
      start the SE application, but not my world bean. I can however see it via the jmx-console.

      I have two more general questions:
      1. Can a bean be an entity bean and a service bean at the same time?
      2. If I offer a management interface for the clients do I still need a remote interface?

      Thank you for your time, any help would be greatly appreciated