我有一个GWT + Hibernate + JPA + Spring配置文件,可以使用Spring 3.0.x + Hibernate 3.6.x. 当我升级到Spring 3.1和Hibernate 4.0时,抛出以下异常:
与Hibernate 4和Spring 3.1有任何已知的不兼容性吗?
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/application-context.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: myPu] Unable to build EntityManagerFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:543)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513)
at … 我有一个JSP,我试图从我的模型中打印出值,但没有出现在我引用这些值的地方.这是我设置值的控制器方法.
@RequestMapping(value = "/poll1", method = RequestMethod.POST)
public String processPoll1(@RequestParam String vote,
HttpServletResponse response, Model model) {
Map<String, Object> resultMap = poll1DAO.tallyVote(vote);
Cookie poll1 = new Cookie("poll1", "voted");
model.addAttribute("poll1Yes", resultMap.get("yes").toString());
model.addAttribute("poll1No", resultMap.get("no").toString());
poll1.setMaxAge(maxSeconds);
response.addCookie(poll1);
return "redirect:/polls";
}
Run Code Online (Sandbox Code Playgroud)
这是JSP中引用Model属性的部分.
<table>
<tr>
<td><b><i>Poll #1 -- </i></b>Would you like to have a 30-year reunion in 2016?<br></td>
</tr>
<tr>
<td><b>Yes</b></td>
<td> – <c:out value='${model.poll1Yes}' /><br /></td>
</tr>
<tr>
<td><b>No</b></td>
<td> – <c:out value='${model.poll1No}' /><br />
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
这是我的输出.不是实际值,而是在属性的位置打印出任何内容.
Poll #1 -- Would you like to have a …Run Code Online (Sandbox Code Playgroud) 这是我第一次尝试Spring3的@Scheduled,但发现我无法承诺DB.这是我的代码:
@Service
public class ServiceImpl implements Service , Serializable
{
@Inject
private Dao dao;
@Override
@Scheduled(cron="0 0 * * * ?")
@Transactional(rollbackFor=Exception.class)
public void hourly()
{
// get xxx from dao , modify it
dao.update(xxx);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为它应该工作,我可以看到它每小时启动并从DB加载xxx,但数据不会提交给DB.
有许多人tx:annotation-driven在春天的XML:
<bean id="entityManagerFactoryApp" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="myapp"/>
</bean>
<bean id="transactionManagerApp" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryApp" />
</bean>
<tx:annotation-driven transaction-manager="transactionManagerApp" />
Run Code Online (Sandbox Code Playgroud)
有人能告诉我我错过了什么吗?
我有一个' 脏 '的解决方案:
@Service
public class ServiceImpl implements Service , Serializable
{
@Inject
private Dao dao;
@Inject
@Qualifier("transactionManagerApp")
private PlatformTransactionManager …Run Code Online (Sandbox Code Playgroud) spring dependency-injection scheduling transactional spring-3
如何告诉Spring运行该init方法?我需要获取Proxied Async类并使用它进行一些初始化.
@Configuration
@EnableAsync
public class Config {
@Bean
public AsyncBean asyncProxyBean(){
return new AsyncBean();
}
public void init(){
doStuffWithProxy(asyncProxyBean());
}
@Bean
public String thisIsHack(){ //this runs the init code but bean is a bit hacky
doStuffWithProxy(asyncProxyBean());
return "";
}
}
Run Code Online (Sandbox Code Playgroud) Spring 3.1.1.RELEASE与Apache Maven 3.0.3和Maven Shade插件1.6.
使用mvn shade插件将工件打包在uber-jar中,包括它的依赖项:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.MyApplication</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
Run Code Online (Sandbox Code Playgroud)
似乎打包很好,但在执行抱怨Spring NamespaceHandler问题:
Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/util]
Offending resource: class path resource [spring/test-context.xml]
Run Code Online (Sandbox Code Playgroud)
这适用于util和p命名空间,但期望它不限于这些:
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
Run Code Online (Sandbox Code Playgroud)
如果我手写重写属性或列表(util),问题就会消失.
以下允许在Spring 3.0中声明单例bean:
@Bean
@Scope(BeanDefinition.SCOPE_SINGLETON)
private void setBean1(Bean1 b1) {
this.b1 = b1;
}
Run Code Online (Sandbox Code Playgroud)
但是,BeanDefinition没有为请求,会话和全局会话定义范围值.这些定义在哪里?否则,我应该使用@Scope("request"),@Scope("session")并@Scope("global session")?
我正在以编程方式/动态创建原型bean.我想在启动后将这些bean放在jmx控制台中.我怎么能区分它们?我正在使用anotations将我的bean添加到jmx并且我有
@ManagedResource(objectName="bean:name=MybBean")
Run Code Online (Sandbox Code Playgroud)
我需要动态注入objectName.知道我怎么能这样做?
这是我的jmx配置:
<context:mbean-export server="mbeanServer" />
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean" />
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"
lazy-init="false">
<property name="beans">
<map>
<entry key="Server:name=HttpAdaptor">
<bean class="mx4j.tools.adaptor.http.HttpAdaptor">
<property name="port" value="8000" />
<property name="host" value="0.0.0.0" />
<property name="processor">
<bean class="mx4j.tools.adaptor.http.XSLTProcessor" />
</property>
</bean>
</entry>
</map>
</property>
<property name="listeners">
<list>
<!--
-->
<bean class="com.fixgw.jmx.HttpAdaptorMgr">
<property name="mbeanServer" ref="mbeanServer" />
</bean>
</list>
</property>
</bean>
<bean id="sessionMDB" class="com.fixgw.mdb.SessionMDB"
scope="prototype" lazy-init="true">
<constructor-arg ref="0" />
<constructor-arg ref="0" />
</bean>
Run Code Online (Sandbox Code Playgroud) 我正在使用<mvc:annotation-driven/>,我想配置RequestMappingHandlerMapping禁用useTrailingSlashMatch.当我声明另一个RequestMappingHandlerMapping时,我将结束2 RequestMappingHandlerMapping.我该如何配置RequestMappingHandlerMapping?
我使用Spring 3.2.5而没有全新的JSR-356 WebSockets支持.
我想在我的@ServerEndpointWebSocket服务器中使用singleton-bean引用,它由servlet容器本身实例化,而不是在Spring上下文中实例化.
干净的方法是什么?
我目前的解决方案:我@Service在静态字段中使用实例制作了单例bean:
@Service
public class WebSocketSupportBean {
private volatile static WebSocketSupportBean instance = null;
public static WebSocketSupportBean getInstance() {
return instance;
}
public WebSocketSupportBean() {
instance = this;
}
Run Code Online (Sandbox Code Playgroud)
并且只是@ServerEndpoint通过静态方法获取它,如果null返回则断开用户连接(如果在服务器启动期间bean没有创建但用户连接时):
两者有什么区别?两者都有getParameter方法和setAttribute方法,然后两者之间的区别?
1)哪一个更好用?
2)请解释可以使用它们的具体方案.