Mark Struberg, Java EE 8'de gelişti.

Portakalkafa

Global Mod
Global Mod


  1. Mark Struberg, Java EE 8'de gelişti.

Java topluluğunda, Java spesifikasyonları (JSR) ve açık kaynak projeleri taleplerine olan bağlılığıyla gelişimi teşvik eden birçok ilginç insan var. Burada bazılarını sunmak ve onlarla projeleri hakkında konuşmak istiyorum. Bu kez Java EE 8 ve Apaches JSON-P'den Mark Struberg ve JSON-B Johnzon'un uygulanmasıyla konuştum.



Thorben Janssen: Yazılımın geliştirilmesine girişiniz ve birçok Apache projesine katılımınız hakkında en son konuştuk. Bu sefer sizinle Java EE 8 hakkında konuşmak istiyorum. Son aylarda birçok spesifikasyon büyük ilerleme kaydetti ve şimdi son sürümü yayınladılar veya yapmak üzereydiler. Bakış açınızdan hangi özellikler özellikle ilginçtir?





Mark Struberg, Java EE 8'de gelişti.



Mark Stuberg



Mark Struberg: Uzun bir süre, Java EE 8 artık görünmüyormuş gibi dışarıdan gelenleri aramak zorunda kaldı. Orijinal plan 2015'teydi, ancak yakında 2016'ya ertelendi. Ve muhtemelen Eylül 2017'de hala bir yayından bahsediliyor.

Java EE 8'i yaklaşık iki alana bölebilirsiniz. Soruya çok fazla coşku ile giden ve aynı zamanda yeni işlevlerin ve neredeyse hiç ilerlemenin olmadığı diğer özelliklere sahip olan projeler. Birçok yeniliğe sahip projeler topluluk tarafından yönlendiriliyor. Java EE'deki tüm fonksiyonel yeniliklerin yaklaşık yüzde 85'i topluluktan geliyor.

Java EE 8'de şahsen çok başarılı bulduğum bazı özellikler ve özellikler

  • Servlet 4.0'da HTTP/2 desteği
  • CDI 2.0 asenkron olaylar ve özellikle üreticiler ve fasulye için programlı proxy. Ve bir arayüz tabanında değil java.lang.refectAncak bir alt sınıf proxy olarak.
  • JSON-B ve özellikle Jax-Gri'ye entegrasyonu
  • JSON-P ve her şeyden önce Jsonpatch ve JsonmergePatch burada
JANSSEN: JSON B ve JSON-P özellikleri zaten sona erdi. Görüşünüze göre en önemli değişiklikler nelerdir ve bu iki spesifikasyon nasıl uyum sağlar?

Struberg:
Burada JSON-P ve JSON-B arasında ayrım yapmalıyız.



JSON İşleme




JSON -P, JSON -Java'dan nesneleri okumak, yazmayı ve değiştirmeyi, okumayı, yazmayı ve değiştirmeyi temsil eder.

Tehlike. İnternette JSON-P hakkında bilgi arıyorsanız, terim JSON bilgilerinin çapraz kısımları için bir mekanizma olan “Dolgu ile JSON” için de kullanılır. Ancak JSON dolgularının içsel belirsizliği nedeniyle, bunun yerini CORS (çapraz menşe kaynak paylaşımı) aldı.

JSON-P'ye geri dön. JSON-P, Java EE 7'den dolaşımda, ancak şu ana kadar olması gerektiği gibi bilinmiyor. JSON-P ile Java'dan Java yazmak ve okumak çok kolay oldu. Her ikisi de JSON-P tarafından desteklenen temel olarak iki farklı yaklaşım vardır:

Jsonobject


Lauterden yapılmış bir nesne ağacı javax.json.jsonvalue-Alt sınıflar (JSONNUMAN,, Jostring…). Aşağıdaki JSON nesnesini bir değişkene alalım Jostring İLE:

{"name":"John Doe", "age":47, "address": {"zip": 12345, "street":"Blubstreet 7"}}

Bu Jono yapısını Java ile okumak istiyorsak, bunu aşağıdaki gibi yapabilirsiniz:

JsonReader jsonReader = javax.json.Json.createReader(new StringReader(jsonString));
JsonObject jsonObject = jsonReader.readObject();

. Jsonobject Şimdi JSON Reading dizesinin tüm grafiğini alıyor. Her şey yaklaşık olarak XML Katedrali Ağacı ile karşılaştırılabilir, sadece bellek için çok daha uygun.

Tabii ki, nesneler gibi JSON değerleri de oluşturabilirsiniz. Bizden beri Sağlayıcı json Daha sık ihtiyacınız var, doğrudan performans nedenleriyle almak istiyoruz:

JsonProvider jsonProvider = JsonProvider.provider();

Öyleyse yukarıdaki bir nesne olan tam olarak JSON'un kendisi yaratalım

JsonObject jsonObject =
jsonProvider.createObjectBuilder()
.add("name", "John Doe")
.add("age", 47)
.add("address", jsonProvider.createObjectBuilder()
.add("zip", 12345)
.add("street", "Blubstreet 7"))
.build();

Ve elbette her şeyi de harcayabiliriz. Bir sunucu uygulamadaysanız ve elinizde bir sunucu uygulaması yanıt nesneniz varsa, doğrudan yazarda olabilirsiniz. Çıkış akışı kullanmak. Örneğimizde sadece bir tane kullanıyoruz Stringwriter:

StringWriter sw = new StringWriter();
JsonWriter jsonWriter = jsonProvider.createWriter(sw);
jsonWriter.writeObject(jsonObject);
System.out.println(sw.toString());

Şimdi 100 ms'lik bir ölçüm sisteminden bir JSON nesnesi yazmak istediğimiz görüntüler ise, bir süre sonra büyük JSON nesneleri çıkıyor. Ve onları bir Fell Fall Swoop'ta büyük bir Java Jsonobject veya JsonArray olarak okumak istemeyebilirsiniz, çünkü bu gereksiz yere çok fazla yer yiyecektir.

Akış


İşte tam da bu yüzden PA JSON, “akış” modu da var. Eğer Jsonobject-Katedral'e kıyasla, JSON P akışını bir saksafon sayfasıyla karşılaştırabilirsiniz. Bir nesne JSON'un başladığı, okuduğu, sonuçlandırıldığı vb. Ve bu şekilde akışın dışındaki bilgilerimizi seçebileceğimiz sonraki olayları alırız. İlişkili sınıflar pakette javax.json.stream.*Örneğin Jsonparser.

Ve JSongenerator Ayrıca bir JSON akışı da yazabiliriz.

Örneğin, ölçülen bir değer akışı yapmak istiyorsanız, daha önce yıkıldığı gibi Json.creteguenerator () A Jsonarray Oluştur ve çok uzun süre Jsonobjects Yıkım talebi gelene kadar dizide yerleştirin.

Çoğu JSON-P 1.0 ile vardı, ancak JSON-P 1.1'de bazı önemli işlevler vardı. İle JSONREADER Örneğin, şimdi “ücretsiz” de yapabilirsiniz. Jsonvalues Oku ve yazın.

Öte yandan, JSON (RFC-6901) işaretçileri ve JSON yamaları (RFC-6902) ve JSON Birleştirme (RFC-7386) oluşturma, uygulama ve değiştirme şansı tamamen yenidir. Son ikisi benzer hizmetler yapıyor, ancak ayrıntılı olarak farklı. Farklılıkları daha sonra açıklayacağım, ama önce neye ihtiyacınız olabileceğini kısaca açıklamak istiyorum.

Bir müşteri üzerindeki önceki tüm satın alımları ile bir müşterinin büyük bir JSON nesnesine sahip olduğumuzu varsayalım ve şimdi soyadını değiştirmek istiyoruz. Bu yüzden tüm JSON nesnesini aktarmak mantıksız olurdu. Bu sadece hatta çok fazla trafik değil, aynı zamanda verilerdeki diğer değişikliklerle potansiyel olarak çatışmalar yaratabilir, örneğin bu arada başka bir kanaldan yeni bir satın alma eklenirse. Bu “rakip” değişimin üzerine yazılacaktır. Ve tam olarak iki Patch JSON mekanizması devreye giriyor, sadece değişikliklerin iletildiği.

Json işaretçisi


Ama ilk olarak JSON bölümlerine kısaca. Bunlar XML'deki XPath'e çok benzer. Kök düğümü bir çubuk (“/” “) ile temsil edilir, sonra özelliklerin adları gelir. JSON'umuzu ilk örneğimizden alıyoruz:

{"name":"John Doe", "age":47, "address": {"zip": 12345, "street":"Blubstreet 7"}}

JSON işaretçisi ile “/Adres/yol” Şimdi “Bubstreet 7” e başvurabilirim.

Ve Json Patch ile pratik bir örnek de var.

JSON PATH


JSON Yaması, bir JSON hedefine uygulanan “değişiklik işlemleri” olan bir JSON dizisidir, yani neredeyse bir Fark etmekÖrneğin:

[{ "op": "replace", "path": "/address/zip", "value": 1010 },
{ "op": "add", "path": "/status", "value": “married” }]

. yol-Her satırın attributörü bir JSON işaretçisidir, ameliyat Hedef nesneye uygulanması gereken işlem.

JSON yamaları, bir JSON nesnesinden karmaşık değişikliklere izin verir, ancak çok fazla alana ihtiyaç duymanın dezavantajına sahiptir.

Json unresci yaması


… kıyaslandığında daha sınırlıdır, ama aynı zamanda biraz daha sınırlıdır. Örneğin, tam bir dizi işlemine izin verilmez. Sen birisin Jsonobjectyalnızca değiştirilecek özellikleri içerir. Bir öznitelik ortadan kaldırılması gerekiyorsa, yeterli olur sıfır Kurmak:

{"age":48,"address":{"street":null}}
Json bağlama


Tamamen yeni olan JSON-B'ye geliyoruz. JSON-B, JAS nesnelerini Java nesnelerine dönüştürmek için Jaxb-An ek açıklamasının liderliğindeki yolculukla karşılaştırılabilir.
Bu röportajın resmini zaten havaya uçurduktan sonra, daha ayrıntılı bir değerlendirme tasarrufu sağlayacağım.

Ama kısaca JSON-B'nin JAX-GRS'ye entegrasyonuna gitmek istiyorum. Şimdiye kadar verilerinizi JSON'da mücadele etmeniz gerekiyordu. Veya tescilli ve artık taşınabilir arayüzler eklediniz. Bu JSON-B ile sona erdi. Ne zaman Kişi.java-Yes, o zaman şimdi sadece aşağıdakileri yazabilirim ve JSON-B, kişi-JSON dizesinde atlama:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{personalnummer}")
public Person getByIsbn(@PathParam("personalnummer") String personalnummer{
return new Person(personalnummer);
}

JANSSEN: Özelliklerin mevcut durumunu nasıl değerlendiriyorsunuz? Java EE 9'da beklendiğiniz başka değişiklikler var mı?

Struberg:
Son altı ay içinde JSON-P 1.1 ve JSON-B 1.0'da birçok temel şeyi çözdük. İki spesifikasyonun pratikte kullanımı gerçekten kolaydır. Bu yüzden sadece minimum değişiklikler bekliyorum.

Janssen: Johnzon ile çalışırken bir geliştirici olarak bilmelisiniz?

Struberg:
Jackson vb. Bu nedenle, spesifikasyondaki API'dan neredeyse her şeye erişilebilir. Bununla birlikte, hala standarda dahil olmayan bazı güzel özelliklerimiz var: örneğin, özyinelemeli verilerin yapılarının işlenmesi ve JSON noktalarını kullananların isteğe bağlı çözünürlüğü.

Johnzon hakkında daha fazla bilgi edinmek istiyorsanız, bu bilgileri https://johnzon.apache.org adresinden bulabilirsiniz, aksi takdirde bize bir e -mail göndereceksiniz: //[email protected]

JANSSEN: Önceki röportajda bize Tomee'ye katılımınızdan bahsettiniz. Birçok Apache projesi zaten Java EE-8 işlevselliği üzerinde çalıştığından veya zaten uyguladığından, Java EE 8 için bir Tomee sürümü bekleyebileceğimiz soru mantıklıdır. Zaten son bir sürüm için randevu var mı?

Struberg:
Ne yazık ki hala randevu yok, ancak şu anda tek tek parçaları dolduruyoruz. En azından Javaone yolunda ilk lansman yapabilmemizi bekliyorum.

Mevcut plan, şimdi Java EE 7 ve Java EE 8 arasındaki geçiş döneminde çeşitli sürümler 8.0.x yayınladığımız ve Java EE 8'de gerçekten her şeye sahip olmaz Tome 8.1.0 yayınlayacağız.

Janssen: Üzerinde çalıştığınız başka projeler var mı?

Struberg:
Evet, çeşitli Apache projelerime ek olarak (OpenWebbeans 2.0- CDI-2.0 uygulaması olarak, örneğin, mikroprofil topluluğuna aktif olarak katılıyorum.

Janssen: Kendinizi nerede bulabilirsin?

Struberg:
Esas olarak çeşitli Apache posta listesinde. Ayrıca, IRC.frenode.net üzerindeki #OpenWebbeans kanalındaki IRC aracılığıyla ve elbette ve elbette ve elbette ve elbette @Struberg Twitter'da.

Janssen: Röportaj için teşekkürler ve projelerinizle iyi şanslar.


((()))
 
Üst