lostyazilim
tr.link

Unable to store Job : 'DEFAULT.JobKey Hatası

2 Mesajlar 844 Okunma
acebozum
tr.link

ZagorCan ZagorCan WM Aracı Kullanıcı
  • Üyelik 18.06.2014
  • Yaş/Cinsiyet 31 / E
  • Meslek Ogrenci
  • Konum Adana
  • Ad Soyad B** A**
  • Mesajlar 391
  • Beğeniler 16 / 55
  • Ticaret 10, (%100)
Hazır olarak indirdiğim bir online oyunun emulatörünü çalıştırdığımda aşağıdaki hatayı almaktayım, çözüm için denemediğim yol kalmadı, zaten çoğu çözümde java üzerinde düzenleme yapmam gerektiği yönündeydi, ben javadan pek anlamıyorum malesef. Aynı emulatorun farklı sürümünü denediğimde de ilk seferinde çalışıyor 2. seferinde yine aynı hatayı alıyorum. Bu sorunu bu emulatorde yaşayan benden başkada kimse yok :)

Hatanın şu kısmını görünce "because one al
ready exists with this identification." aynı işlemi kullanan başka program var mı diye kontrol ettim fakat yok ben yinede ekstradan çalışan ne varsa kapattım fakat bişey değişmedi. Emulatörün cache sisteminden kaynaklıdır diye düşünürek cache'ide boşalttım fakat nafile, bilen birisi yardımcı olursa çok mutlu olurum. Neredeyse 2 haftadır bu hatayla uğraşıyorum.

Hatanın tamamı ;

16:41:39.335 ERROR[main]: - Critical Error - Thread: main terminated abnormaly: com.aionemu.commons.services.cron.CronServiceException: Failed to star
t job
com.aionemu.commons.services.cron.CronServiceException: Failed to start job
at com.aionemu.commons.services.CronService.schedule(CronService.java:135) ~[al-commons.jar:na]
at com.aionemu.commons.services.CronService.schedule(CronService.java:116) ~[al-commons.jar:na]
at com.aionemu.gameserver.services.LimitedItemTradeService.start(LimitedItemTradeService.java:67) ~[AL-Game.jar:na]
at com.aionemu.gameserver.GameServer.main(GameServer.java:263) ~[AL-Game.jar:na]
Caused by: org.quartz.ObjectAlreadyExistsException: Unable to store Job : 'DEFAULT.JobKey:Started at ms1483281699085; ns1316974701603', because one al
ready exists with this identification.
at org.quartz.simpl.RAMJobStore.storeJob(RAMJobStore.java:277) ~[quartz-2.1.7.jar:na]
at org.quartz.simpl.RAMJobStore.storeJobAndTrigger(RAMJobStore.java:249) ~[quartz-2.1.7.jar:na]
at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:840) ~[quartz-2.1.7.jar:na]
at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:250) ~[quartz-2.1.7.jar:na]
at com.aionemu.commons.services.CronService.schedule(CronService.java:133) ~[al-commons.jar:na]
... 3 common frames omitted
 

 

wmaraci
reklam

YazilimMimari YazilimMimari Eski adi: Turgay Can Kullanıcı
  • Üyelik 25.06.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Engineering Director
  • Konum İstanbul Avrupa
  • Ad Soyad T** C**
  • Mesajlar 771
  • Beğeniler 2 / 260
  • Ticaret 0, (%0)
Oyun emülatörü ile alakalı bir problem değil.

Oyun çalıştırıldığında arka planda Quartz'ı çalıştırıyor.

Quartz ise zamanlanmış görevleri çalıştıran ap ayrı bir framework ve kendi içinde "uygulamadan bağımsız" işletim sisteminin thread'lerını kullanır vs. Windows ise işletim sisteminiz, görev yöneticisinden Quartz servisini görüyor olursunuz göremezseniz tüm çalışan task/process'leri göster seçeneği vardır, windows'ta, göremezseniz, seçeneği açıp, öyle bakın listeye.

Aldığın problem ise, uygulama ilk çalıştırıldığında, bir job yaratıyor.

job nedir diye soracak olur isen -> Quartz scheduler job olarak aratıp teknik bilgi edinebilirsin.

Senin olayında şu şekilde cereyan ediyor.

İlk çalıştırdığında, uygulamanın ilk tetiklendiği yerde Quartz tetikleniyor ve bir resource dosyasında - DEFAULT.JobKey ile bir job yaratıyor. Yarattığı job yukarıda belirttiğim gibi uygulamadan bağımsız bir kütüphane(quartz) ile yaratıldığı için sen emülatörü kapatıp, tekrar açtığında, aynı job'ı yaratmaya çalışacaktır, bu noktadada uygulama zaten böyle bir thread var aynı isimde ikinci bir job oluşturamazsın diye hata alıyor.


Bunu nasıl çözerim.

İki şekilde;

1 - Ya manuel olarak emülatoru kapattığında, görev yöneticisinden çalışan quartz servisinide kapatacaksın.

2 - Yada uygulamanın main metodu içine aşağıdaki herhangi bir şekilde kod yazacaksın.

a - Uygulama ilk açıldığında, quartz kütüphanesinde vardır böyle bir özellik, çalışan thread pool içinde DEFAULT.JobKey adına sahip bir job aktif varmıdır diye kontrol edersin, eğer yok ise job'ı yaratırsın, var isede hiç bir şey yaptırmazsın.

b- Diğer yöntem, uygulama herhangi bir şekilde kapatıldığında, Android uygulamaların activity cycle'ı içinde onDestroy metodu vardır. Bu metod bloğu içine bir kntrol koyarak. Eğer DEFAULT.JobKey'e ait aktif bir job var ise onu shutdown ettirecek 2 satırlık kodu yazarsın. Böylelikle uygulama kapandığında job'ıda otomatik kapatmış olursun.


--

İşin teknik boyutuna hiç girmeyeceğim, benden bedava akıl buraya kadar.
 

 

https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al