zb2*_*226 10 java oracle eclipselink java-ee-6 ejb-3.1
在GlassFish(3.1.2.2b5)上运行的Java EE 6应用程序中,假设您有一个ConfigurationService,它读取一些属性文件并相应地分发属性值:
@Local
public interface ConfigurationService { ... }
Run Code Online (Sandbox Code Playgroud)
@Singleton
public class ConfigurationServiceImpl implements ConfigurationService { ... }
Run Code Online (Sandbox Code Playgroud)
还有一个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"/>
...
Run Code Online (Sandbox Code Playgroud)
public class MySessionCustomizer implements SessionCustomizer {
@EJB
private ConfigurationService configurationService;
@Override
public void customize(Session session) {
session.getLogin().setTableQualifier(configurationService.getSchemaName());
...
Run Code Online (Sandbox Code Playgroud)
是否有可能以ConfigurationService这种方式注入,以便在SessionCustomizer实例化时可用?上述操作失败,因为ConfigurationService实例仍然为空,即注入尚未发生.此观察对应于服务器的日志条目.似乎依赖注入机制总是在持久性单元 - 因此SessionCustomizer- 被实例化之后开始.我搞砸周围的各种注释(@Startup,@DependsOn(...),...),但无济于事.我的结论是正确的还是有另一种方法让EJB更早实例化并注入?
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |