小编Jua*_*cia的帖子

在编译的类中没有反射的序列化

由于客户端JVM的限制,我不能使用任何流行的序列化器,因为不支持反射.我正在寻找一种工具,通过将编写器和读取器方法注入已编译的类来执行字节码操作以实现序列化.我需要字节码操作java代码将它与我的构建过程代码绑定.

我一直这样做是通过生成代码并将其注入源代码,然后再编译使用我的自定义序列化程序.我想避免这种方法,因为我不想以任何方式修改源文件.

我知道Kryo和其他XML和JSON序列化程序,但它们不符合我的需求.

谢谢.

java serialization code-generation bytecode-manipulation

17
推荐指数
2
解决办法
870
查看次数

Tomcat中的H2 SqlException在嵌入模式下被另一个进程锁定

我的Web项目在Tomcat 7中运行.我的服务器提供程序已经有一个MySql服务器,但我想使用H2,因为它给了我更大的灵活性和速度.我的服务器提供商给我一个限制,说我不应该启动一个新线程,这样做会自动导致tomcat停止.我的项目处于alpha beta测试阶段,所以它已在本地进行测试.我经常被另一个进程锁定SqlException.当Tomcat更新线程池时会发生这种情况,大部分时间都是在从Eclipse自动发布时发生的(这不是交易,因为它不会在服务器上发生),但有时它会随机发生.我的应用程序不直接访问数据库,但通过一个包装器,我相信它不会产生问题,但也会阻止它发生很多.它看起来像Tomcat发送保持连接到后台的线程,任何前台线程都将失败(我的应用程序是数据库密集型).在服务器模式下打开一个连接将解决问题,但它将在一个我不大声的新进程中运行.我想保留H2,所以在我必须切换到MySql之前,我需要一个以下任何答案的解决方案:

  • 在没有Tomcat线程池冲突的情况下,我可以以某种方式连接到嵌入式H2吗?
  • 我可以在没有H2的情况下连接到服务器模式H2来创建新进程吗?

注意:我无法发布任何实际代码.我肯定不是我的申请问题.我不认为这是必要的,但我会写一个描述我的包装器如何处理连接,如果需要,但问题已经确定如上所述.

java tomcat h2

6
推荐指数
1
解决办法
837
查看次数

从抽象类调用未声明的超级方法时获取当前对象属性

可能是一个非常基本的java问题.

我有一个抽象类,简化它:

public abstract class A{
  private String value = "A" ; // I want it undeclared, but set it for testing purpouse

  public String getValue(){
    return value ;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个扩展它的类:

public abstract class B{
  private String value = "B" ;
}
Run Code Online (Sandbox Code Playgroud)

所以我遇到的问题是,当通过类A创建B的实例并调用getValue()时,它总是返回"A":

A b = new B();
b.getValue(); // returns "A"
Run Code Online (Sandbox Code Playgroud)

如何使用自己的属性获取B调用super方法而无需重复代码?它目前太长了,并且它被扩展到许多不同的类,它们只是由属性值不同而且所有类都使用与超类相同的方法.

谢谢!

编辑:

对不起,我没那么具体.我有很多属性,以及一些处理这些属性的方法.扩展类更改了这些属性,但我希望将超类方法与扩展类实例化对象一起使用,而不必将它们声明两次.如果有帮助的话,我正在使用servlet上下文属性.

Config.java

public abstract class Config {
    private String someValue1 ;
    ...
    private String someValuen ;

    public void export(ServletContext cxt){
        cxt.setAttribute("someValue1", someValue1);
        ...
        cxt.setAttribute("someValuen", …
Run Code Online (Sandbox Code Playgroud)

java inheritance

1
推荐指数
1
解决办法
746
查看次数