加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将EJB注入Eclipselink SessionCustomizer以提供Oracle模

发布时间:2020-12-14 16:34:02 所属栏目:Java 来源:网络整理
导读:在运行在GlassFish(3.1.2.2b5)上的 Java EE 6应用程序中,假设您有一个ConfigurationService,它会读取一些属性文件,并相应地输出属性值: @Localpublic interface ConfigurationService { ... } @Singleton public class ConfigurationServiceImpl implements
在运行在GlassFish(3.1.2.2b5)上的 Java EE 6应用程序中,假设您有一个ConfigurationService,它会读取一些属性文件,并相应地输出属性值:
@Local
public interface ConfigurationService { ... }
@Singleton  
public class ConfigurationServiceImpl implements ConfigurationService { ... }

还有一个Eclipselink SessionCustomizer,因为应用程序中的一个持久性单元(Oracle数据库)的模式名称需要以编程方式设置,即可以从之前提到的属性文件进行配置. SessionCustomizer在persistence.xml中配置,该实现包含对ConfigurationService的引用:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"...
    <persistence-unit name="myPU" transaction-type="JTA">
        <property name="eclipselink.session.customizer" value="MySessionCustomizer"/>
        ...
public class MySessionCustomizer implements SessionCustomizer {
    @EJB
    private ConfigurationService configurationService;
    @Override
    public void customize(Session session) {
        session.getLogin().setTableQualifier(configurationService.getSchemaName());
        ...

是否可以以这种方式注入ConfigurationService,以便在SessionCustomizer被实例化时可用?以上失败,因为ConfigurationService实例仍为空,即注入尚未发生.此观察结果对应于服务器的日志条目.看起来像依赖注入机制始终是在持久性单元之后启动的,因此SessionCustomizer是被定制的.我已经搞砸了各种注释(@Startup,@DependsOn(…),…),但没有用.我的结论是正确的还是有更多的EJB实例化和注入的方法?

解决方法

由于会话自定义程序是由EclipseLink(而不是由您的容器)创建的,所以容器不负责注入依赖项.

使用JNDI查找.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读