EJB容器初始化错误,无法调用defineClass

时间:2018-02-22 16:11:41

标签: java-ee kotlin glassfish

当我试图逃跑时,我的玻璃鱼抛出异常。

  

[2018-02-22T17:07:04.135 + 0100] [glassfish 5.0] [SEVERE] []   [javax.enterprise.system.core] [tid:_ThreadID = 46   _ThreadName = admin-listener(4)] [timeMillis:1519315624135] [levelValue:1000] [[加载应用程序时出现异常:EJB]   容器初始化错误java.lang.RuntimeException:无法   调用defineClass!

我在此处上传了服务器日志:https://pastebin.com/cB0EgG4Y

userDAO的

@Stateless
class UserDao : Abstract<User>() {
    override fun getEntityClass(): Class<User> {
        return User::class.java
    }
}

Abstract Dao

@Stateless
abstract class Abstract<T : Model> {
    @PersistenceContext(unitName = "kwetter")
    private lateinit var entityManager: EntityManager

    abstract fun getEntityClass(): Class<T>

    fun find(id: Int): T {
        return entityManager.find(getEntityClass(), id)
    }
}

服务

@Stateless
class UserService {
    @Inject private var userDao: UserDao? = null

    fun find(id: Int): User {
        return userDao!!.find(id)
    }
}

API端点

@Stateless
@Named
@Path("/users")
class Users {
    @Inject private var userService: UserService? = null

    @GET
    @Path("/{id}")
    @Produces("application/json")
    fun single(@PathParam("id") id: Int): User {
        return userService!!.find(id)
    }
}

2 个答案:

答案 0 :(得分:0)

在Kotlin中,默认情况下所有类都隐式componentDidCatch,因此日志中出现此错误:

  

引起:java.lang.VerifyError:无法从最终类继承       at java.lang.ClassLoader.defineClass1(Native Method)       在java.lang.ClassLoader.defineClass(ClassLoader.java:763)

如果要扩展它们,请将您的课程标记为已打开:

  

类的开放注释与Java的最终版本相反:它允许其他人继承此类。默认情况下,所有类   Kotlin是final,与Effective Java,Item 17:Design相对应   和继承文件或禁止它。

https://kotlinlang.org/docs/reference/classes.html#inheritance

答案 1 :(得分:0)

您还可以使用 all-open-compiler-plugins https://kotlinlang.org/docs/reference/compiler-plugins.html#all-open-compiler-plugin

  

Kotlin默认情况下具有类及其成员final,这使得它   不方便使用诸如Spring AOP之类的框架和库   要求公开课。全开放的编译器插件适应Kotlin   符合这些框架的要求,并使类具有注释   带有特定注释,并且其成员打开时没有显式   打开关键字

另请参阅:https://dzone.com/articles/the-state-of-kotlin-for-jakarta-eemicroprofile-tra