当我试图逃跑时,我的玻璃鱼抛出异常。
[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)
}
}
答案 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