我有以下环境设置:
我很想知道如何编写可以引用应用程序服务器提供的JNDI数据源的Java客户端(即Web应用程序之外)的代码.
Sun Application Server的端口都是默认端口.在服务器配置中有一个名为jdbc/xxxx的JNDI数据源,但我注意到Web应用程序的Hibernate配置使用名称java:comp/env/jdbc/xxxx.
到目前为止,我见过的大多数例子都涉及代码
Context ctx = new InitialContext();
ctx.lookup("jdbc/xxxx");
Run Code Online (Sandbox Code Playgroud)
但似乎我要么使用错误的JNDI名称,要么我需要配置jndi.properties或其他配置文件来正确指向监听器?我有来自Sun Application Server的appserv-rt.jar,里面有一个jndi.properties,但似乎没什么帮助.
这里有一个类似的问题,但它没有给出任何代码/指的是让iBatis自动获取JNDI数据源:从Web容器外部访问数据源(通过JNDI)
我试图Validator在Spring 3.0.x下编写自己的(根据JSR-303规范).
我用isValid(Serializable, CosntraintValidatorContext)方法注释了方法@Transactional,但似乎事务建议没有应用于此方法 - 当isValid()调用方法时,调用sessionFactory.getCurrentSession()创建异常:
org.hibernate.HibernateException:没有Hibernate会话绑定到线程,配置不允许在这里创建非事务性的
我有一个@Autowired sessionFactory在Validator没有问题的情况下注入的同一个bean.我目前的解决方法是使用openSession()而不是getCurrentSession(),但这涉及手动事务管理,我宁愿避免.
在我的验证器bean的构造函数中执行堆栈跟踪,似乎我的Validatorbean是通过调用来构造的o.s.b.f.s.AbstractAutowireCapableBeanFactory.createBean().我认为这意味着工厂能够填充@Autowired我的字段Validator,但似乎它没有应用任何交易建议?
提前感谢您对此事的任何帮助.
编辑:如果有任何帮助,我已经包含了一个create new Exception()在构造函数中记录的部分stacktrace(via ):
at com.mydomain.validators.UniqueValidator.<init>(UniqueValidator.java:49) ~[UniqueValidator.class:na]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.6.0_20]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) [na:1.6.0_20]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) [na:1.6.0_20]
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) [na:1.6.0_20]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:74) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:958) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:286) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] …Run Code Online (Sandbox Code Playgroud)