2011-06-20 18 views
9

EclipseLink & वसंत का उपयोग करके गतिशील बुनाई को मैं कैसे कॉन्फ़िगर कर सकता हूं? अभी मैं इसे जूनिट टेस्ट के साथ काम करने की कोशिश कर रहा हूं, लेकिन बाद में मुझे इसे टॉमकैट के साथ काम करना होगा (मेरे विभाग को 10 साल की तरह कुछ के लिए मानकीकृत किया गया है)।मैं एक्लिप्ससेंक और स्प्रिंग का उपयोग करके गतिशील बुनाई कैसे कॉन्फ़िगर कर सकता हूं?

मैं दो मुख्य समस्याओं में चल रहा हूँ:

अपवाद::

java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:181) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) 
<snip> 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.weaving.AspectJWeavingEnabler#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
<snip> 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
<snip> 
Caused by: java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar 
    at org.springframework.context.weaving.DefaultContextLoadTimeWeaver.setBeanClassLoader(DefaultContextLoadTimeWeaver.java:91) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1437) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1408) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    ... 44 more 

मैं इस वसंत इंस्ट्रुमेंटेशन कॉन्फ़िगर करके ठीक कर सकते हैं

1. वसंत लोड अवधि बुनकर चाहता है :

JVM parameter: 
-javaagent:/path/to/org.springframework.instrument-3.1.0.M2.jar 

2. Eclipselink स्प्रिंग इंस्ट्रूमेंटेशन से संतुष्ट नहीं है:

त्रुटि:

(similar error messages repeated many times) 

[EL Severe]: 2011-06-20 16:12:57.951--ServerSession(979781372)--Local Exception Stack: 
Exception [EclipseLink-0] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.IntegrityException 
Descriptor Exceptions: 
--------------------------------------------------------- 

Exception [EclipseLink-60] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DescriptorException 
Exception Description: The method [_persistence_set_shellType_vh] or [_persistence_get_shellType_vh] is not defined in the object [ps.entity.JudicialArtifactFamily]. 
Internal Exception: java.lang.NoSuchMethodException: ps.entity.JudicialArtifactFamily._persistence_get_shellType_vh() 
Mapping: org.eclipse.persistence.mappings.ManyToOneMapping[shellType] 
Descriptor: RelationalDescriptor(ps.entity.JudicialArtifactFamily --> [DatabaseTable(JUDICIAL_ARTIFACT_FAMILY)]) 

Exception [EclipseLink-218] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DescriptorException 
Exception Description: A NullPointerException would have occurred accessing a non-existent weaved _vh_ method [_persistence_get_shellType_vh]. The class was not weaved properly - for EE deployments, check the module order in the application.xml deployment descriptor and verify that the module containing the persistence unit is ahead of any other module that uses it. 

मैं की कोशिश की EclipseLink बुनकर का उपयोग करके यह तय करने के लिए:

-javaagent:/dev/tools/javaagents/eclipselink.jar 

लेकिन तब मैं समस्या # 1 से एक ही अपवाद।

लाइब्रेरी संस्करणों

मैं उपयोग कर रहा हूँ:

  • जावा 1.6.0_24
  • EclipseLink 2.2.0.v20110202-r8913
  • वसंत 3.1.0 M2

कॉन्फ़िगरेशन फ़ाइलें

यहाँ मेरी persistence.xml है:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      version="2.0" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="eclipseLinkHashPU" transaction-type="RESOURCE_LOCAL"> 
     <class>ps.entity.Artifact</class> 
     <class>ps.entity.JudicialArtifactFamily</class> 
     <class>ps.entity.ShellType</class> 
     <class>ps.entity.SourceArtifact</class> 
     <class>ps.entity.Health</class> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties>  
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
      <property name="eclipselink.ddl-generation.output-mode" value="database"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

यहाँ मेरी application.xml है:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jaxrs="http://cxf.apache.org/schema/jaxrs" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx-2.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-2.5.xsd 
      http://cxf.apache.org/schema/jaxrs 
      http://cxf.apache.org/schema/jaxrs.xsd 
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   
      http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd 
      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"> 

    <context:component-scan base-package="ps"> 
    </context:component-scan> 

    <context:load-time-weaver/> 

    <alias alias="entityManagerFactory" name="eclipseLinkEntityManagerFactory"/> 

    <bean id="eclipseLinkEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceXmlLocation" value="classpath:eclipselink-persistence.xml" /> 
     <property name="persistenceUnitName" value="eclipseLinkHashPU" /> 
     <property name="jpaPropertyMap"> 
      <map> 
       <entry key="eclipselink.logging.level" value="Severe"/> 
       <entry key="eclipselink.target-database" value="org.eclipse.persistence.platform.database.oracle.OraclePlatform"/> 
       <entry key="javax.persistence.nonJtaDataSource" value-ref="hash1DataSource"/> 
       <!-- it's not good that I'm turning weaving off --> 
       <!-- <entry key="eclipselink.weaving" value="false"/> --> 
      </map> 
     </property> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"> 
       <property name="databasePlatform" value="oracle" /> 
       <property name="database" value="ORACLE" /> 
       <property name="generateDdl" value="true" /> 
       <property name="showSql" value="true" /> 
      </bean> 
     </property> 
    </bean> 

    <!-- datasources, etc --> 
</beans> 
+0

2017 तक कोई समाधान? – Wecherowski

उत्तर

4

वसंत के साथ बुनाई के लिए मेरा मानना ​​है कि आप कुछ तरह की जरूरत है,

<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> 
    <property name="defaultDataSource" ref="dataSource" /> 
    <property name="dataSources"> 
     <map> 
      <entry> 
       <key> 
        <value>jdbc/__default</value> 
       </key> 
       <ref bean="dataSource" /> 
      </entry> 
      <entry> 
       <key> 
        <value>jdbc/jta</value> 
       </key> 
       <ref bean="dataSource" /> 
      </entry> 
     </map> 
    </property> 
    <property name="loadTimeWeaver"> 
     <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 
    </property> 
</bean> 

यहां कुछ जानकारी है,

http://wiki.eclipse.org/EclipseLink/Examples/JPA/JPASpring

सुनिश्चित करें कि आप वसंत संदर्भ तक पहुंचने से पहले अपने कक्षाओं तक नहीं पहुंच रहे हैं।

एक और समाधान स्थैतिक बुनाई का उपयोग करना है।

+0

हाय @ जेम्स "सुनिश्चित करें कि आप वसंत संदर्भ तक पहुंचने से पहले अपनी कक्षाओं तक नहीं पहुंच रहे हैं।" इसे कैसे प्राप्त करें क्योंकि मुझे एक ही समस्या का सामना करना पड़ रहा है। कृपया सुझाव दें। –

1

org.springframework.instrument-3.1.0.M2.jartomcat/lib निर्देशिका में कॉपी करें और फिर से प्रयास करें।

2

अब, मैं EclipseLink 2.2 और Spring 3.1 का भी उपयोग कर रहा हूं। मेरा विन्यास आपके साथ थोड़ा अलग है। आपके eclipseLinkEntityManagerFactory में कोई loadTimeWeaver कॉन्फ़िगरेशन नहीं है। मुझे लगता है, अगर आप नीचे के रूप में उपयोग करते हैं तो यह ठीक रहेगा।

.. कृपया, अपना Oracle DB जानकारी के साथ नीचे के रूप में की कोशिश

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:faces="http://www.springframework.org/schema/faces" 
     xmlns:int-security="http://www.springframework.org/schema/integration/security" 
     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:sec="http://www.springframework.org/schema/security" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xsi:schemaLocation="http://www.springframework.org/schema/integration/security http://www.springframework.org/schema/integration/security/spring-integration-security-2.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
     http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd 
     http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/faces http://www.springframework.org/schema/faces/spring-faces-2.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> 

    <context:annotation-config/>  
    <context:component-scan base-package="your-package"/> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="your-driver"/> 
     <property name="url" value="your-database-url"/> 
     <property name="username" value="your-username"/> 
     <property name="password" value="your-passowrd"/> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
<!--  <property name="dataSource" ref="dataSource"/>--> 
     <property name="persistenceUnitName" value="your-persistence-unit-name"/> 
     <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/> 
     <property name="jpaDialect"> 
      <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect"/> 
     </property> 
     <property name="jpaPropertyMap"> 
      <props> 
       <prop key="eclipselink.weaving">false</prop> 
      </props> 
     </property> 

     <property name="loadTimeWeaver"> 
      <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"> 
      </bean> 
     </property> 
    </bean> 

    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"> 
     <property name="databasePlatform" value="org.eclipse.persistence.platform.database.OraclePlatform" /> 
     <property name="generateDdl" value="false"/> 
     <property name="showSql" value="true"/> 
    </bean> 
</beans> 
0

इकाई परीक्षण के लिए उपकरण को देखते हुए, एक Maven-अचूक-प्लगइन

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <argLine>-javaagent:lib/test/spring-instrument-4.0.2.RELEASE.jar</argLine> 
    </configuration> 
</plugin> 

को वीएम तर्क के रूप में जोड़ सकते हैं माना जाता है कि स्प्रिंग-वाद्य यंत्र जार को इसी स्थान पर रखा गया था।

(कि के लिए, निम्न निर्भरता अस्थायी रूप से परियोजना pom.xml में जोड़ा जा सकता

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-instrument</artifactId> 
    <scope>test</scope> 
</dependency> 

और फिर निर्माण के बाद, इसी विरूपण साक्ष्य स्थानीय .m2 निर्देशिका से परियोजना की lib/परीक्षण निर्देशिका में प्रतिलिपि।)