标签: forward-compatibility

为什么有些框架拒绝放弃对古老Java版本的支持?

当我坐在这里修改PircBot时,我注意到整个后端都是为了支持Java 1.1而编写的.它有一个自定义队列实现,使用哈希表,基于wait()和notify()信令的自定义生产者/消费者实现等.即使Commons-lang也缺乏对Java 5带来的东西的支持,如泛型.你可以提供一些非常流行的框架的其他例子,尽可能地努力支持1.1.

我的问题是为什么?为什么Java社区的某些部分拒绝支持新版本?我遵循这个理论:旧版本使用旧版本的框架和较旧的JVM,较新的版本使用升级的框架和JVM.您使用该软件升级所有内容.

现在我可以部分理解仍在运行Java 1.5但是1.1的人?如果您之前运行任何东西,那么您显然不会因为愚蠢的策略/害怕未知而升级JVM,因此不会升级到更新版本的软件.那么我们为什么还要支持他们呢?

在相关的说明中,如果你正在编写一个新框架,你应该支持<1.5吗?您是否应该尝试将现有框架升级为1.5,然后与维护人员讨论使用它?

更具体的讨论(这是关于一般的支持): 是否还有充分的理由支持JDK 1.4?

不再支持JRE 1.3

java backwards-compatibility forward-compatibility

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

使用较旧版本的实体类实现复杂JPA实体的部分更新

我有一个概念性的问题,我希望有人可能有答案.

我有什么?

我有一个RESTful服务,它为单一类型的实体提供类似CRUD的操作.实体(让我们称之为命令)使用Jackson表示为JSON.Jackson注释直接附加到实体类,没有明确的数据传输层.实体类包含许多属性,一对一和一对多关系.

从技术上讲,它基于Wildfly 10,JAX-RS 2.0和JPA 2.1(使用Hibernate 5).

目前支持的操作是:

  • GET 通过使用orders/123 读取实体EntityManager.find
  • PUT 使用或orders/123 创建替换实体EntityManager.persistEntityManager.merge

代码示例

该实体的简化版本如下所示:

@Entity
@Table(name = "order")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_EMPTY)
public class Order {

    @Id
    @SequenceGenerator(name = "order_id", sequenceName = "order_id_seq", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="order_id")
    @Column(name = "id")
    private long id;

    @Version
    private long version;

    @Column(name = "correlation_id", unique = true)
    private long correlationId;

    @OneToOne(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JsonManagedReference
    private …
Run Code Online (Sandbox Code Playgroud)

rest jpa jax-rs forward-compatibility

6
推荐指数
0
解决办法
201
查看次数

新版本的java可以在旧版本上运行吗?

我有一个疑问,java是向后兼容还是向前兼容?另外,我们可以在具有 JDK 8 的 MAC 上运行在 JDK 11 Windows 中编写的 java 字节码吗?我试图理解平台独立性的概念。

java backwards-compatibility forward-compatibility

6
推荐指数
2
解决办法
8297
查看次数

具有前向和后向兼容性的插件架构

我目前正在研究一种使用插件类型系统的C#产品.这不是什么新鲜事,我已经看到很多关于如何使用接口来轻松实现此功能的信息.

我还看到了通过更新接口名称来实现向后兼容性的方法,例如:版本之间的接口更改 - 如何管理?

对于主exe和插件之间的版本不匹配,我可以预见多种情况.

  1. 主程序与插件相同的插件版本
  2. 主程序比插件更新
  3. 主程序早于插件

从信息我已经能够收集1和2工作就好了.但我无法弄清楚如何正确实现"前向"兼容性(3).

我们打算只对插件API添加ADD方法.

任何想法都会有很大的帮助.

c# plugins backwards-compatibility forward-compatibility

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

如何在Python 3.2程序中优雅地包含Python 3.3 from None exception语法?

我正在尝试重新引发异常,以便为用户提供有关实际错误的更好信息.Python 3.3包括PEP 409.它添加了raise NewException from None语法来抑制原始异常的上下文.

但是,我的目标是Python 3.2.Python脚本将解析,但在运行时如果遇到from None它将产生的语法 TypeError: exception causes must derive from BaseException.例如:

try:
    regex_c = re.compile('^{}$'.format(regex)) 
except re.error as e:
    e_msg = 'Regular expression error in "{}"'.format(regex)
    e_reraise = Exception(e_msg)
    # Makes use of the new Python 3.3 exception syntax [from None]
    # to suppress the context of the original exception
    # Causes an additional TypeError exception in Python 3.2
    raise e_reraise from None
Run Code Online (Sandbox Code Playgroud)

封装raise e_reraise from None …

python exception forward-compatibility python-3.2 python-3.3

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

如何安全地为Perl 5.8.9编译Perl 5.12模块?

我想在我的Perl 5.8.9中安装File :: Fetch,它是Perl 5.12中的核心模块.一般来说,我想在我的后期Perl中编译和安装未来日期的模块,因为我无法升级我的Perl.

所以我下载了模块及其依赖项.依赖树之后非常痛苦,但我更关心的是它们中的一些是核心模块.如果我安装这些,我的Perl 5.8.9核心将有5.12的补丁.

我的问题是如何知道我是否可以安全地安装未来的模块,特别是核心模块.是否有一个教程用于测试Perl中的向后兼容性?

编辑:
我的模块是双重生命,但我无法使用cpan编译它.它说我的FTPsite.yaml有一个坏元素.但是,我遵循模块的META文件中的依赖项,我可以编译模块.这是cpan中的奇数位吗?谢谢.

我手动安装所有这些依赖项后无法重新创建该问题.但这是错误:

cpan[5]> install File::Fetch
Running install for module 'File::Fetch'
Running make for B/BI/BINGOS/File-Fetch-0.24.tar.gz
CPAN: Digest::SHA loaded ok (v5.48)
CPAN: Time::HiRes loaded ok (v1.9715)
CPAN: YAML loaded ok (v0.72)
Alert: While trying to 'parse' YAML file
 '/Users/martin/.cpan/FTPstats.yml'
with 'YAML' the following error was encountered:
  YAML Error: Invalid element in map
   Code: YAML_LOAD_ERR_BAD_MAP_ELEMENT
   Line: 3
   Document: 1
 at /opt/local/lib/perl5/site_perl/5.8.9/YAML.pm line 36
Run Code Online (Sandbox Code Playgroud)

perl module compilation forward-compatibility

3
推荐指数
2
解决办法
518
查看次数