Karaf 내부의 Camel 경로에서 JPA를 사용하여 mysql 데이터베이스를 읽고 쓰는 간단한 사용 사례를 시도하고있다.Karaf 내부에서 org.apache.openjpa.lib.xml.XMLFactory의 NoClassDefFoundError
2013-07-19 17:01:47,178 | WARN | ft.WorkoutEntity | JpaConsumer | rg.apache.camel.util.CamelLogger 224 | 68 - org.apache.camel.camel-core - 2.10.4 | Consumer Consumer[jpa://WorkoutEntity] failed polling endpoint: Endpoint[jpa://WorkoutEntity]. Will try again at next poll. Caused by: [java.lang.NoClassDefFoundError - Could not initialize class org.apache.openjpa.lib.xml.XMLFactory] java.lang.NoClassDefFoundError: Could not initialize class org.apache.openjpa.lib.xml.XMLFactory at org.apache.openjpa.jdbc.sql.SQLErrorCodeReader.parse(SQLErrorCodeReader.java:107) at org.apache.openjpa.jdbc.sql.DBDictionary.endConfiguration(DBDictionary.java:4712) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443) at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:199) at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:100)
XMLFactory 나의 번들 수입 않은는 OpenJPA 집계 번들에 포함되어 있습니다 : 낙타가 경로를 포함 내 코드를로드 할 때 자주/항상 다음 스택 트레이스가 발생합니다. 동일한 org.apache.openjpa.lib.xml 패키지에서 다른 객체를 인스턴스화 할 수도 있습니다.
opensource OpenJPA 코드를 열어서 XMLFactory를 살펴 보았습니다. 맨 위에는 클래스가로드 될 때 호출되어야하는 정적 블록이 있습니다. 정적 블록은 SAX 및 DOM 파서 팩토리를 인스턴스화하는 것만 큼 복잡하지는 않습니다.
org.apache.openjpa.lib.xml.XMLFactory.getClass()
이 클래스는 클래스 로더에로드하려면, 가끔이 중지 오류 :
는 경우, 경로를 포함 내 자바 코드에서, 나는 다음 줄을 추가합니다. 여기 은 일부 버전 정보입니다 :Karaf => 2.3.2
낙타 => 2.10.4 및 2.11.1을 시도
는 OpenJPA => 2.2.0과 2.2.2
을 시도MySQL은 => 5.1.25
당신이 더 많은 정보가 필요하면 알려주세요.
- 새로운 Info- 나는 karaf 프롬프트에서 DEBUG 수준 로깅을 설정하고 지금 NoClassDefError
2013-07-19 17:35:36,784 | DEBUG | ft.WorkoutEntity | TransactionTemplate | tion.support.TransactionTemplate 160 | 75 - org.springframework.transaction - 3.2.3.RELEASE | Initiating transaction rollback on application exception javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:122)[:2.2.0] at org.apache.openjpa.lib.xml.XMLFactory.(XMLFactory.java:60) at org.apache.openjpa.jdbc.sql.SQLErrorCodeReader.parse(SQLErrorCodeReader.java:107) at org.apache.openjpa.jdbc.sql.DBDictionary.endConfiguration(DBDictionary.java:4712) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443) at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:199) at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:100) at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
이것은 NoClassDefFound 오류를 설명하기 전에이 오류를 참조하십시오.
큰 일했다, 감사합니다! –
어. OSGi 번들은 누락 된 번들로 인해 NoClassDefFoundError를 던져서는 안됩니다. –