日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

将旧版本从Java EE 5减少到7

發布時間:2023/12/3 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将旧版本从Java EE 5减少到7 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java EE 5于2005年首次引入,而Java EE 7于2013年問世。這兩個版本之間有7年的差距,從技術角度來說,這就像一個世紀。

許多組織仍然對使用Java EE 5感到困惑,并且有很多正當理由選擇不升級。 不過,如果您考慮一些前進的理由,這些將變得無關緊要:

  • 受益于最新改進
  • 2013年第一季度的Java 6 EOL
  • 維護成本增加
  • 難以保持開發人員的興趣

這些原因尚有爭議,可能不足以說服某人升級。

在過去的幾年中,我一直在開發具有相當大尺寸的應用程序,而最近它已從Java EE 5遷移到了7。

停止傳統

每年,都會引入新功能,以增加應用程序代碼庫。 它甚至超過了100萬行代碼! 僅憑這一事實就說明很難瀏覽如此龐大的代碼庫。 如果應用程序持續增長,隨著時間的流逝只會變得更糟。 從開始應用到現在,我們可以觀察到每年的增長一直穩定,直到2015年為止。 此后,代碼仍在增長,但速度較慢。

怎么樣?

實際上,通過更改為Java EE 7,可以產生相同的結果,但是只需編寫更少的代碼。 對于小型應用程序來說,這似乎不是什么大問題,但是當我們談論一百萬時,它就產生了巨大的變化。

通過花費更少的時間來實現相同的功能,您不僅可以提高工作效率,而且引入bug的機會也更少,這是因為您還可以減少混亂的代碼。

沒有人真的想更改舊代碼,尤其是如果它正在運行,甚至更糟的話,您也不知道為什么要使用它。 但是Java EE 7(和6)有一些易于使用的功能,從Java EE 5遷移時可以立即使用。

CDI

記住在像Servlet這樣的不同上下文中獲取EJB的繁瑣工作:

public static <T> T getLocalBean(final Class<T> klass) {try {LocalBinding localBinding = klass.getAnnotation(LocalBinding.class);if (localBinding == null) {throw new BeanNotFoundException(“…”);}return (T) initialContext.lookup(localBinding.jndiBinding());} catch (Exception e) {throw new BeanNotFoundException(“…”);} }

其中大多數可以簡單地用@Inject代替。

不再有本地接口

總是必須為您的Bean定義一個接口很麻煩,特別是如果它們僅在本地使用時:

@Stateless @Local(UserBusiness.class) public class UserBusinessBean implements UserBusiness {... }

只需替換為:

@Stateless public class UserBusinessBean {... }

單身人士

老式的Singleton(也許不是最正確的方法):

public class ModuleListener {? private static ModuleListener moduleListener;? private static ModuleBusiness moduleBusiness;?? private ModuleListener() {? moduleBusiness = BeanFactory.getLocalBean(ModuleBusinessBean.class);? }?? public static ModuleListener getInstance() {? if (moduleListener == null) {? moduleListener = new ModuleListener();? }? return moduleListener;? } }

您只需將其更改為:

@Singleton? @Lock(LockType.READ)? public class ModuleListener {?? @EJB? private ModuleBusiness moduleBusiness; }

驗證方式

由于Java EE 5中沒有Bean驗證可用,因此有時您不得不采取以下措施:

public static int fieldEntityMaxLenght(Class clazz, String field) throws Exception {? int maxLength = 0;? if (field != null) {? Column annotation = clazz.getDeclaredField(field).getAnnotation(Column.class);? maxLength = annotation.length();? }? return maxLength;? }public static void rejectIfMaxLengthExceeded(String field, int maxLength) {? if (field != null && field.length() > maxLength) { … } }

現在,我們可以在要驗證的字段中使用@NotNull和@Max批注。

JMS

在Java EE 5中使用JMS是一件痛苦的事情:

@Resource(mappedName = "java:/JmsXA") private ConnectionFactory connectionFactory; @Resource(mappedName = "java:/jms/queue/EmailQueue") private Destination destination;public void sendAlertsByEmail(Map<Long, String> toSend, List<AlertAttachment> files) {try {Connection connection = connectionFactory.createConnection();Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);MessageProducer producer = session.createProducer(destination);HashMap<String, Alert> dataToSend = new HashMap<>();for (Long alertId : toSend.keySet()) {log.info(String.format("Sending alert %d to %s", alertId, toSend.get(alertId)));Alert alert = findAlert(alertId);alert.getAlertContent().setBodyMail(undecorateHTMLLinks(TemplateContextUtils.createMailMessage(alert, Configuration.getInstance())));dataToSend.put(toSend.get(alertId), alert);}ObjectMessage messageToSend = session.createObjectMessage();messageToSend.setObject(dataToSend);producer.send(messageToSend);// send message and then clean upsession.close();connection.close();} catch (Exception e) {log.error("Unexpected error occured", e);} }

借助JMS 2.0和Java EE 7,您可以大大減少代碼并使用鏈接調用:

@Inject private JMSContext context; @Resource(mappedName = "java:/jms/queue/EmailQueue") private Queue inboundQueue; public void sendMessage (Map<Long, String> toSend, List<AlertAttachment> files) {HashMap<String, Alert> dataToSend = new HashMap<>();for (Long alertId : toSend.keySet()) {log.info(String.format("Sending alert %d to %s", alertId, toSend.get(alertId)));Alert alert = findAlert(alertId);alert.getAlertContent().setBodyMail(undecorateHTMLLinks(TemplateContextUtils.createMailMessage(alert, Configuration.getInstance())));dataToSend.put(toSend.get(alertId), alert);}context.createProducer().setPriority(1)! .setTimeToLive(1000)! .setDeliveryMode(NON_PERSISTENT)! .send(inboundQueue, dataToSend); }

向前進

這些示例只是如何簡化代碼的冰山一角。 還有更多示例,但是這些是該項目中使用的主要示例。

請在評論部分發布您的示例。

另外,如果您想了解有關檢查我的會話的更多信息,請參閱從Java EE 5到7的遷移故事,其中涵蓋了我們為完全遷移應用程序而必須實現的一些解決方案。 每種情況都是不同的,沒有正確的方法,但可以為您實現目標的道路提供一個很好的思路。

滑梯

Roberto Cortez 從Java EE 5到7的遷移故事

視頻

翻譯自: https://www.javacodegeeks.com/2015/11/reduce-legacy-from-java-ee-5-to-7.html

總結

以上是生活随笔為你收集整理的将旧版本从Java EE 5减少到7的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。