Netbeans platform may cause your application randomly locks up

Some of our clients reported intermittent hangs/exceptions with unknown direct cause. The hangs relate primarily to GUI interactions such as selecting combo box or closing dialog boxes.

Several days ago, we migrated look and feel of some of our products to Substance. The migration went smooth until we are hit by UiThreadingViolationException(s). To our surprise, the (many) exceptions are caused by the netbeans platform itself.

We do an extensive research about the exception and finally found some references:

The conclusion is clear. Netbeans platform do many of its swing components creation/modification off Event Dispatcher Thread. Both bugs are resolved as won’t fix.

Why EDT is so important? As stated by the javadoc, in general, Swing is not thread safe. All Swing components and related classes, unless otherwise documented, must be accessed on the event dispatching thread. You may experience random deadlocks if you do not do so as explained by eppleton. Wikipedia has explanation for this subject as well.

So, what can we do? There are two alternatives. You may patch netbeans yourself, or push the netbeans team to consider this a real bug.

Viar uses Katalis Indonesia’s PPIC

Leading Chinese motorcycle factory in Indonesia uses Katalis Indonesia PPIC for its production and shipping system. The system handles production planning, production process, shipping, and warehousing. Deployed in several locations across Indonesia, the system provides Viar with real time monitoring and enforces strict control procedures.

Viar Factory in Semarang

About Viar

PT Triangle Motorindo, chinese motorcycle industry leader based in Jakarta, Indonesia manufactures or distributes motorcycles across Indonesia. The company’s brands include Viar, Vio R, Karya, and N Star ZR. For more information regarding Viar, please visit www.viarmotor.com.

Poliklinik Terang Bangsa

Poliklinik Terang Bangsa now uses polyclinic management system developed by Katalis Indonesia. The system handles ticketing, treatment, billing, medical record, and accounting.

Poliklinik Terang Bangsa

Dhaniel, administrator of the clinic

Polyclinic Terang Bangsa is located on Arteri Marina Utara near Holy Stadium.  Equipped with state-of-art technology such as 4D USG, the clinic serves general public and gives special prices for needy people.

Lowongan Juli 2010

Kami Katalis Indonesia mencari karyawan dengan kriteria berikut:

Posisi: 1 Java Programmer

Job Description:

  1. Pemeliharaan sistem
  2. Dukungan ke pengguna sistem
  3. Implementasi/Coding sistem berdasarkan desain

Kualifikasi Yang Dibutuhkan:

  1. JEE/JSE
  2. Kemampuan komunikasi (tidak pasif)
  3. Problem solving
  4. OOP
  5. hibernate
  6. spring
  7. kendaraan sendiri

Kualifikasi Opsional:

  1. Mempunyai sabuk di http://www.blackbeltfactory.com/
  2. extjs/sencha
  3. netbeans platform
  4. membaca UML
  5. agile/scrum
  6. mercurial

Lokasi kerja: Semarang dan on site client (Jawa) jika diperlukan

Kompensasi:

  1. gaji (tulis permintaan Anda)
  2. bonus per proyek
  3. kos (bila dari luar kota)

Status pekerjaan:

  1. 6 bulan percobaan, masing-masing pihak bisa mengakhiri kontrak dengan pemberitahuan 1 minggu sebelumnya.
  2. Setelah percobaan, kontrak 1 tahun.

Proses rekrutmen:

  1. Pelajari teknologi yang dibutuhkan
  2. Buat aplikasi kecil dengan teknologi tersebut. Ide aplikasi tidak dinilai. Yang penting aplikasi berjalan.
  3. Buat blog mengenai aplikasi tersebut lengkap dengan screenshots.
  4. Kirim CV ke thomas@katalisindonesia.com beserta URL yang menunjuk ke blog screenshot aplikasi tersebut.
  5. Kandidat yang kami rasa memenuhi syarat akan dipanggil untuk wawancara.
  6. Susunan acara wawancara: diskusi pekerjaan yang akan dilakukan; psikotes; presentasi aplikasi pada poin 2; tanya jawab aplikasi; negosiasi kompensasi; tanda tangan kontrak
  7. Mulai bekerja

Pertanyaan: Silakan ditujukan langsung ke thomas@katalisindonesia.com.

Terima kasih.

From redmine to JIRA

Below is query to retrieve redmine issue data including comments
SELECT i.id as issueId, i.subject as issueSubject, i.description
as issueDescription, i.due_date as issueDueDate, i.priority_id
as issuePriorityId, i.created_on as issueCreatedOn,
i.updated_on as issueUpdatedOn, i.start_date as issueStartDate,
i.done_ratio as issueDoneRatio, i.estimated_hours as issueEstimatedHour,
tr.name as trackerName,
p.name as projectName, p.description as projectDescription,
p.homepage as projectHomePage, p.created_on as projectCreatedOn,
p.updated_on as projectUpdatedOn, p.identifier as projectIdentifier,
c.name as categoryName, s.name as statusName,s.name as resolutionName,
u.login as assignedToLogin, u.firstName as assignedToFirstName,
u.lastName as assignedToLastName, u.mail as assignedToMail,
v.name as fixedVersionName, v.effective_date as fixedVersionEffectiveDate,
au.login as authorLogin, au.firstName as authorFirstName,
au.lastName as authorLastName, au.mail as authorMail,
(select group_concat(concat_ws(' ',j.created_on, ju.login, j.notes) separator '\n')
from journals j left join users ju on ju.id=j.user_id where j.journalized_id=i.id and length(j.notes) > 0) as note
FROM issues i left join trackers tr on tr.id=i.tracker_id
left join projects p on p.id = i.project_id
left join issue_categories c on c.id=i.category_id
left join issue_statuses s on s.id=i.status_id
left join trackers t on t.id=i.tracker_id
left join users u on u.id=i.assigned_to_id
left join versions v on v.id=i.fixed_version_id
left join users au on au.id=i.author_id
where i.id is not null order by i.project_id, i.id

Properties are:

# written by PropertiesConfiguration
# Fri Jun 25 02:33:12 WIT 2010
importsingleproject = false
importexistingproject = false
mapfromcsv = true
field.projectName = project.name
field.issueCreatedOn = created
field.issueUpdatedOn = updated
field.issueDueDate = duedate
field.issueEstimatedHour = customfield_10001
field.issueSubject = summary
field.fixedVersionName = fixVersions
field.projectDescription = project.description
field.issuePriorityId = priority
field.projectIdentifier = project.key
field.issueId = customfield_10000
field.authorLogin = reporter
field.issueDescription = description
field.statusName = status
field.assignedToLogin = assignee
field.trackerName = type
field.categoryName = components
field.projectHomePage = project.url
value.statusName.Feedback = 5
value.statusName.Resolved = 5
value.issuePriorityId.7 = 1
value.issuePriorityId.5 = 3
value.issuePriorityId.6 = 2
value.trackerName.Test = 5
value.trackerName.Feature = 4
value.trackerName.Support = 3
value.issuePriorityId.4 = 4
value.issuePriorityId.3 = 5
value.statusName.Closed = 6
value.trackerName.Bug = 1
value.statusName.New = 1
value.trackerName.Task = 3
value.statusName.Rejected = 5
value.statusName.Assigned = 3
date.import.format = yyyy-MM-dd
user.email.suffix = @katalisindonesia.com
existingprojectkey = AKLI
field.fixedVersionEffectiveDate = resolutiondate
field.note = comment
field.resolutionName = resolution
value.resolutionName.Feedback = 4
value.resolutionName.Closed = 1
value.resolutionName.Rejected = 2
value.resolutionName.Assigned = Assigned
value.resolutionName.Resolved = 1
value.resolutionName.New =
date.fields = issueCreatedOn
date.fields = issueUpdatedOn
date.fields = issueDueDate
date.fields = fixedVersionEffectiveDate