小编Mic*_*les的帖子

在Spring 3.1.0中使用Spring Data JPA

有谁知道如何使用Spring Data JPA并使用Spring 3.1.0/3.1.1?

Spring Data JPA 1.0.3依赖于spring 3.0.5,所以当我添加一个spring数据jpa作为依赖时,我就会遇到冲突,因为我使用的是3.1.0.

我尝试过使用maven排除但没有取得多大成功.

java spring maven spring-data-jpa

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

当这些类可能正在使用时,如何成功卸载这些类?

我在我的应用程序中内置了重新加载类的功能。但是,我需要澄清类加载器的行为。

让我解释一下我所知道的,然后提出问题......

我所做的是提供一个由自定义类加载器加载的特殊 jar。然后在 jar 的引导过程中,创建了一堆 spring bean,并且实现某些接口的 bean 被注册以供中央应用程序使用。

现在我在应用程序中启动一个使用这些新类的进程。我可以成功卸载“jar”,更改 jar 中的类并重新加载,然后我就得到了更改。用类加载器的说法来说,卸载意味着使加载类的类加载器无法访问 - 这会导致该类加载器加载的任何类都无法访问,从而有效地卸载。

但是,据我所知,一旦虚拟机加载了该类,它就会将其存储在某个共享空间中,因此不必再次加载它。

我遇到的问题是,有时卸载和重新加载新类不起作用。旧班级仍然存在。按理说,如果我卸载一个类加载器(即使类加载器无法访问)并且该类加载器中的某个类当前正在使用(存在该类型的对象),则无法卸载该类。

这是真的?实践中似乎也是如此。

如果是这样,我如何成功卸载类加载器无法访问时正在使用的类。例如,我可以在每个类上放置一个弱引用,以便我可以检测到类何时无法访问,并在类无法访问时采取行动吗?(但不确定我可以采取什么行动)。

更新响应@Kayaman

我的用例是,我拥有核心应用程序,然后根据客户的要求,我可以加载实现核心应用程序中已知接口的不同类(以便可以访问它们)。然后核心应用程序启动使用这些类的各种进程。这样做的一大优点是,我可以更新这些插件类,而无需进行大量的重新部署,并且每个客户并不需要其中的每一个。当我想加载其中之一的新版本并且当前版本正在使用时,问题就出现了。按理说这是不可能的。

结论

@Kayamam 非常感谢您的咨询。这非常有帮助。这在一定程度上规范了我的想法。结论是,无论我使用什么技术,在虚拟机的现有方式下,您都无法重新加载当前存在强可达对象的类。对于我的一些重新加载,我可以控制这些对象,因为我可以在卸载和重新加载之前使它们无法访问,但对于其他类,我不能这样做......这就是我的问题所在。我需要做的是围住我希望重新加载的类的对象,以便在重新加载这些对象的类时可以暂停使用它们的进程。

java classloader dynamic-class-loaders

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

Spring @Transaction在抛出Exception时不回滚

我一直在寻找这个问题,在StackOverflow和Google上有很多这样的问题,但我似乎无法为我工作.

这是我的代码Spring配置:(我不使用任何切入点 - 我想我不需要?)

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
...
</bean>

<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 <property name="dataSource" ref="dataSource" />
 ...
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="hibernateSessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
Run Code Online (Sandbox Code Playgroud)

我有一个服务类:

@Service
public class ServiceImpl implements ServiceInterface 
{
    /**
     * Injected session factory
     */
    @Autowired(required=true)
    private SessionFactory sessionFactory;

    @Autowired(required=true)
    private Dao myDao;

    /**
     * {@inheritDoc}
     */
    @Transactional(rollbackFor=Exception.class, propagation=Propagation.REQUIRED)
    public void scheduleBlast(BlastParameters blastParameters) throws ServiceException 
    {
        ... do bunch of stuff ..
        myDao.persist(entity)

        if(true)
            throw new ServiceException("random error")
    }

    .. setter methods and …
Run Code Online (Sandbox Code Playgroud)

java hibernate spring-3

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

将Java Option调用迁移到kotlin

我正在用kotlin迈出第一步.

我正在将一些现有的Java代码迁移到kotlin.

我有以下几点:

storyDate.ifPresent(article::setPublishDate);
Run Code Online (Sandbox Code Playgroud)

其中storyDate是一个Optional并且文章有一个方法setPublishDate(Date)方法.

我如何将此行迁移到kotlin?

https://try.kotlinlang.org上的自动迁移器是

storyDate.ifPresent(Consumer<Date>({ article.setPublishDate() }))
Run Code Online (Sandbox Code Playgroud)

但是这行不能用kotlin编译器编译.

kotlin kotlin-interop

0
推荐指数
3
解决办法
571
查看次数