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;
|
| //@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")
| //@Remote(WorldRemote.class)
| //@RemoteBinding (jndiBinding="SE/World")
| @Management(WorldManagement.class)
| @Entity
| @Table(name="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;
| @OneToOne
| 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.";
|
| if(!exit.isOpen()){
| if(player.hasKey(exit.getOpens_with())){
| exit.open();
|
player.removeItemfromInventory(exit.getOpens_with());
| temp = "You used a key to open the door.\n";
| }
| else{
| 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.
| */
| @Id
| 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();
| kill(toKill);
| }
|
| 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>
| <fileset dir="C:\Programme\jboss-4.0.4.GA\lib">
| <include name="*.jar"/>
| </fileset>
| </path>
|
|
| <!-- 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}"/>
| </copy>
|
| </target>
|
| <!-- Undeploy created ear File -->
| <target name="undeploy">
| <delete file="${jbossDeployDir}/${earFile}" quiet="false"/>
| </target>
|
|
| <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"/>
| </target>
|
| <!-- MUST use JDK 1.5 compiler -->
| <target name="compile" depends="prepare">
| <javac destdir="${build.dir}/classes"
| classpathref="build.classpath"
| debug="on">
| <src path="${src.dir}"/>
| </javac>
| </target>
|
| <!-- 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="**"/>
| </fileset>
|
|
| </jar>
| </target>
|
|
| <!-- 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"/> -->
| </metainf>
|
| <fileset dir="${build.dir}/jar"
| includes="*.jar"/>
| </jar>
|
|
| <delete file="${build.dir}/jar/SE.jar"/>
| <delete dir="${build.dir}/classes"/>
| </target>
|
| <!-- 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"/>
| </fileset>
| </copy>
|
| <zip destfile="${build.dir}/zip/SE.zip"
| basedir="${build.dir}/SE"
| />
| </target>
|
| <target name="clean">
| <delete dir="${build.dir}" />
| </target>
|
| <target name="all">
| <antcall target="clean" />
| <antcall target="package-ejb" />
| <antcall target="assemble-app" />
| <antcall target="assemble-src" />
| <antcall target="deploy" />
| </target>
|
|
| </project>
|
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{
|
| try{
|
|
| MBeanServer server = MBeanServerLocator.locate();
|
| world = (WorldManagement) MBeanProxyExt.create(
| WorldManagement.class,
| "SE:service=world",
| server);
|
| //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));
|
| //System.out.println(calculator.test());
| System.out.println(world.tell());
|
| //
| }
| catch(Exception e){e.getMessage(); e.printStackTrace();}
| //Login login = new Login();
| /*Vector<Item> test = new Vector<Item>();
| Item item1 = new HealthPack(50);
| test.add(item1);
|
| System.out.println(test.contains(item1));
| Item item2 = test.get(test.indexOf(item1));
| test.remove(item1);
| //test.add(item2);
| System.out.println(test.contains(item1));
| System.out.println(test.contains(item2));
| */
| }
| }
When i run the client i get the following error:
anonymous wrote : java.util.NoSuchElementException
| 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
cheers
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3945901#3945901
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3945901
-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user