Kilka maszyn wirtualnych java

0

Witam!

Mam pytanie: czy na jednym PC może znajdować się więcej niż jedna JVM? Mam pewien program, który aby móc uruchomić więcej niż raz wymaga nowej maszyny wirtualnej. Oczywiście można postawić nowy system wirtualny (np. używając virtual machine), ale jestem ciekawy czy da się to zrealizować bez tego?

0

Oczywiście, że się da i to jest zupełnie normalne.

Odpalenie kolejnego JVMa odbywa się np poprzez wywołanie java <parametry> lub javaw <parametry>.

0

Dzięki, a czy da się to zrobić pod Eclipsem?

0

Da się. W sumie nawet nie pamiętam czy domyślnie Eclipse odpala wszystko w jednym własnym procesie czy tworzy nowe, ale raczej da się zmienić to ustawienie. Nie chce mi się szukać, może ktoś inny odpowie.

0

Nie miałem dotychczas w Eclipse problemów z uruchomieniem równocześnie kilku programów, mogło tez chodzić równocześnie kilka wersji tego samego programu.

0

No właśnie jak uruchamiam jakiś kod kilka razy przez Run Configurations to wywala mi błąd (dodam że kompiluje kod używając frameworku JADE)

0

Jaki błąd?

0

treść błędu przy ponownym uruchomieniu:

2012-07-09 06:47:09 jade.core.Runtime beginContainer
INFO: ----------------------------------
    This is JADE snapshot - revision $WCREV$ of $WCDATE$
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
----------------------------------------
2012-07-09 06:47:09 jade.core.AgentContainerImpl joinPlatform
SEVERE: Some problem occurred while joining agent platform.
jade.core.ProfileException: Can't get a proxy to the Platform Manager [nested jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]]
	at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:574)
	at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
	at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
	at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:336)
	at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:472)
	at jade.core.Runtime.createMainContainer(Runtime.java:148)
	at jade.Boot.<init>(Boot.java:130)
	at jade.Boot.main(Boot.java:70)
Nested Exception:
jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]
	at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:276)
	at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563)
	at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
	at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
	at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:336)
	at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:472)
	at jade.core.Runtime.createMainContainer(Runtime.java:148)
	at jade.Boot.<init>(Boot.java:130)
	at jade.Boot.main(Boot.java:70)
Nested Exception:
java.rmi.AlreadyBoundException: ServiceManager
	at sun.rmi.registry.RegistryImpl.bind(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
	at sun.rmi.transport.Transport$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
	at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
	at java.rmi.Naming.bind(Unknown Source)
	at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:224)
	at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563)
	at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
	at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
	at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:336)
	at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:472)
	at jade.core.Runtime.createMainContainer(Runtime.java:148)
	at jade.Boot.<init>(Boot.java:130)
	at jade.Boot.main(Boot.java:70)
2012-07-09 06:47:09 jade.core.Runtime$1 run
INFO: JADE is closing down now. 
0

Nie znam JADE, ale to prawie oczywiste, że takie coś się nie uda. Próbujesz ponownie bindować obiekt o takiej samej nazwie. Możesz próbować uruchamiać program z parametrem, a nazwy bindowanych obiektów uzależniać od tego parametru.

0

Ok, ale czy można to zrobić przez Run Configuration. Standardowo uruchamiam to tak jade.Boot -pers:agenty.PersonalAgent a jak próbuję kiedy jeden agent jest uruchomiony jade.Boot -drugi:agenty.PersonalAgent to wyrzuca mi powyższy błąd.

0

To moze łaskawie poczytasz dokumentację tego JADE a nie będziesz to robił metodą radzieckiego sapera? o_O

1 użytkowników online, w tym zalogowanych: 0, gości: 1