微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

weblogic 上的 spring 数据 jpa 抛出:java.lang.IllegalArgumentException:本地化消息键:type-not-managed

如何解决weblogic 上的 spring 数据 jpa 抛出:java.lang.IllegalArgumentException:本地化消息键:type-not-managed

我之前看到过 this similar question,但它并没有解决我的问题。
您可以从 github

fork 项目

我使用的是 weblogic 12.4.2、spring 4.0.4、maven 3.6、Openjpa 2.4.2、springData 1.1.6 和 Eclipse ide 2020-06。
我必须在 weblogic(完全 java EE 环境)上部署我的应用程序,所以,正如 spring docks 13.5.1.2 Obtaining an EntityManagerFactory from JNDI 所说,我使用 jndi 注入 entityManagerFactory,

<jee:jndi-lookup jndi-name="java:comp/env/persistence/batchEntityManagerFactory" id="emf" />

并声明

<persistence-unit-ref>
    <persistence-unit-ref-name>persistence/batchEntityManagerFactory</persistence-unit-ref-name>
    <persistence-unit-name>batch</pe

rsistence-unit-name>

在战争项目的 web.xml 中。
这是我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
            http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
            version="2.0">
            
            <persistence-unit name="batch" transaction-type="JTA" > 
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl </provider>
    <jta-data-source>jdbc/datasource</jta-data-source>
    <class>com.smartsoft.persistence.Person</class>
    <validation-mode>NONE</validation-mode>
      <properties>
      <property name="openjpa.jdbc.DBDictionary" value="derby(NextSequenceQuery=VALUES NEXT VALUE FOR {0})"/>
    <!--  <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>-->
      <property name="openjpa.Log" value="DefaultLevel=TRACE"/>
      <property name="openjpa.TransactionMode" value="managed"/>
     <property name="openjpa.Connection2UserName" value="app"/>
    <property name="openjpa.Connection2Password" value="app"/>
    <property name="openjpa.Connection2URL" value="jdbc:derby://localhost:1527/testdb;create=false"/>
    <property name="openjpa.Connection2DriverName" value="org.apache.derby.jdbc.ClientDriver"/>
    </properties>
  </persistence-unit>
</persistence>

这是 Spring 的 xml 配置:

<beans
//xml name spaces
<context:component-scan base-package="com.smartsoft.persistence"/>
<context:annotation-config/>
<aop:aspectj-autoproxy/>
<tx:annotation-driven/>
<tx:jta-transaction-manager/>
  <jee:jndi-lookup jndi-name="java:comp/env/persistence/batchEntityManagerFactory" id="emf" />
<jpa:repositories base-package="com.smartsoft.persistence" entity-manager-factory-ref="entityManagerFactory" consider-nested-repositories="true"  />
</beans>

在使用@Startup 注释的 Singleton Ejb 中,我初始化了 spring 上下文。

context = new ClasspathXmlApplicationContext("applicationContext.xml");  

我有一个 Person 实体:

@Entity
public class Person {
    @SequenceGenerator(name="sec1",sequenceName="mysequence" )
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sec1")
    private long id;
    private String firstName;
    private String lastName;
private int age;
// simple getters and setters

}

还有一个简单的 DaoRepository,它扩展了 Spring 的 Jpa 存储库。

public interface DaoRepository<T,ID extends Serializable> extends JpaRepository<T,Serializable> {

}

在另一个 bean 中,我调用 DaoRepository.save 并将一个新的 Person 传递给它。

public Person savePerson(Person person) {
    logger.info("person has been persisted successfully");
    return repo.save(person);
}

weblogic.application.ModuleException: java.lang.IllegalArgumentException: localized message key: type-not-managed; substitutions: [class java.lang.Object]
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.IllegalArgumentException: localized message key: type-not-managed; substitutions: [class java.lang.Object]
    at org.apache.openjpa.persistence.Meta.metamodelImpl.managedType(metamodelImpl.java:192)
    at org.springframework.data.jpa.repository.support.JpametamodelEntityinformation.<init>(JpametamodelEntityinformation.java:67)
    at org.springframework.data.jpa.repository.support.JpaEntityinformationSupport.getMetadata(JpaEntityinformationSupport.java:65)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityinformation(JpaRepositoryFactory.java:149)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:88)
    Truncated. see log file for complete stacktrace
> 

任何帮助都会得到帮助。 感谢分配。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。