java - सीतनिद्रा में होना, जावा 9 और SystemException




spring hibernate (2)

मुझे लगता है कि यह है: --add-modules java.se.ee अनुसार जावा EE के साथ साझा नहीं किया गया है डिफ़ॉल्ट रूप से हल सभी जावा ईई मॉड्यूल को हल करेगा, जिसका उपयोग आंतरिक एपीआई के समाधान के लिए किया जाएगा। इसलिए, डेवलपर्स को एक-एक करके विशिष्ट मॉड्यूल जोड़ने की आवश्यकता नहीं है। दूसरी तरफ, JDK9 भी EE को SE से अलग कर रहा है। javax.transaction.SystemException अब JDK9 लाइब्रेरी में नहीं है, लेकिन यह EE लाइब्रेरी में है। जैसा कि java.se.ee मॉड्यूल-जानकारी:

@SuppressWarnings({"deprecation", "removal"})
@Deprecated(since="9", forRemoval=true)
module java.se.ee {

    requires transitive java.se;

    // Upgradeable modules for Java EE technologies
    requires transitive java.activation;
    requires transitive java.corba;
    requires transitive java.transaction;
    requires transitive java.xml.bind;
    requires transitive java.xml.ws;
    requires transitive java.xml.ws.annotation;

}

लेकिन मॉड्यूल java.transaction यह केवल है: InvalidTransactionException, TransactionRequiredException, TransactionRolledbackException

मैं जावा 9 / स्प्रिंग बूट 1.5.x / मावेन प्रोजेक्ट में हाइबरनेट 5.2.11 एप्लिकेशन को चलाने की कोशिश कर रहा हूं, लेकिन मैं लापता कक्षा में असफल रहा हूं:

Caused by: java.lang.NoClassDefFoundError: javax/transaction/SystemException
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:375)
    at org.jboss.logging.Logger$1.run(Logger.java:2554)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2529)
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2516)
    at org.hibernate.internal.HEMLogging.messageLogger(HEMLogging.java:28)
    at org.hibernate.internal.HEMLogging.messageLogger(HEMLogging.java:24)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<clinit>(EntityManagerFactoryBuilderImpl.java:115)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:54)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
    ... 33 more

क्या किसी को भी इस अपवाद का सामना करना पड़ा है और कोई समाधान जानता है? मैंने javax.bind या java.se.ee के लिए --add- --add-modules जोड़ने की कोशिश की, लेकिन उन्होंने मदद नहीं की।

उपरोक्त त्रुटि एक मावेन-फ़ेलसेफ़ (2.20.1) एकीकरण परीक्षण से पता चलता है जो हाइबरनेट के साथ स्प्रिंग संदर्भ शुरू करता है। आवेदन में कोई जावा 9 विशिष्ट कोड नहीं है।


माइग्रेशन गाइड और जावा डॉक्स के अनुसार, पैकेज javax.transaction को निर्यात करने वाले मॉड्यूल java.transaction बाद से java.transaction के रूप में चिह्नित किया गया है।

आपको इसके बजाय javaee/javax.transaction का उपयोग करने के लिए आदर्श रूप से अपने कोड को माइग्रेट करना चाहिए। वर्तमान में, आप निर्भरता से परिवर्तित स्वचालित मॉड्यूल का उपयोग कर सकते हैं:

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.2</version>
</dependency>

और module-info.java को निम्नलिखित में जोड़ना: -

requires javax.transaction.api;

इसके अलावा मावेन maven-failsafe-plugin का उपयोग करते समय, सुनिश्चित करें कि आप न्यूनतम संगत संस्करण 2.20.1 या उससे ऊपर का उपयोग कर रहे हैं जैसा कि मावेन के प्रगति दस्तावेज में उल्लेख किया गया है

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.20.1</version>
</plugin>

@Deprecated (forRemoval = "ओपी की पुष्टि के बाद")

दूसरी ओर, एक अस्थायी वर्कअराउंड (क्योंकि अंततः इन मॉड्यूल को JDK से हटा दिया जाएगा) का उपयोग करने के लिए किया जा सकता है: -

--add-modules java.transaction

जैसा कि टिप्पणियों में उल्लेख किया गया है, चूंकि javax.transaction-api लिए आवश्यक निर्भरता पहले से ही javax.transaction-api पर उपलब्ध है, आपको किसी भी कंपाइलर विकल्प को जोड़ने की आवश्यकता नहीं होनी चाहिए अन्यथा आप वर्तमान पैकेज को java.transaction मॉड्यूल के साथ समाप्त कर देंगे निर्यात javax.transaction पैकेज जो आदर्श रूप से आपके उपयोग के मामले के लिए SystemException से SystemException





java-9