﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-This Is A FineDay-随笔分类-SSH</title><link>http://www.blogjava.net/fine/category/11897.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 13 Jun 2007 23:26:48 GMT</lastBuildDate><pubDate>Wed, 13 Jun 2007 23:26:48 GMT</pubDate><ttl>60</ttl><item><title>Spring Mvc</title><link>http://www.blogjava.net/fine/archive/2007/06/12/123579.html</link><dc:creator>Peter Pan</dc:creator><author>Peter Pan</author><pubDate>Tue, 12 Jun 2007 05:05:00 GMT</pubDate><guid>http://www.blogjava.net/fine/archive/2007/06/12/123579.html</guid><wfw:comment>http://www.blogjava.net/fine/comments/123579.html</wfw:comment><comments>http://www.blogjava.net/fine/archive/2007/06/12/123579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fine/comments/commentRss/123579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fine/services/trackbacks/123579.html</trackback:ping><description><![CDATA[控制器（controller）、验证器（validator）、命令对象（command object）、表单对象（form object）、模型对象（model object）、Servlet分发器（<code class="classname">DispatcherServlet</code>）、处理器映射（handler mapping）、视图解析器（view resolver）等等<br /><table summary="WebApplicationContext中特殊的bean" border="1"><tbody><tr><td>控制器(Controller)</td><td> 实现的是MVC中<code class="literal">C</code> 那个组成部分。 </td></tr><tr><td>处理器映射(Handler mapping)</td><td>包含预处理器（pre-processor），后处理器（post-processor）和控制器的列表，它们在符合某种条件时才被执行（例如符合控制器指定的URL）。 </td></tr><tr><td>视图解析器(View resolvers)</td><td>可以将视图名解析为对应的视图。 </td></tr><tr><td>本地化解析器(Locale resolver)</td><td>能够解析用户正在使用的本地化设置，以提供国际化视图。 </td></tr><tr><td>主题解析器(Theme resolver)</td><td>能够解析你的web应用所使用的主题，以提供个性化的布局。 </td></tr><tr><td>上传文件解析器(multipart file resolver)</td><td>提供HTML表单文件上传功能。 </td></tr><tr><td>处理器异常解析器(Handler exception resolver(s))</td><td>可以将异常对应到视图,或者实现更加复杂的异常处理代码。</td></tr></tbody></table><img src ="http://www.blogjava.net/fine/aggbug/123579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fine/" target="_blank">Peter Pan</a> 2007-06-12 13:05 <a href="http://www.blogjava.net/fine/archive/2007/06/12/123579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jpa （EJB3 Entity Bean） 好东西就顺便拿来了</title><link>http://www.blogjava.net/fine/archive/2007/04/05/108679.html</link><dc:creator>Peter Pan</dc:creator><author>Peter Pan</author><pubDate>Thu, 05 Apr 2007 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/fine/archive/2007/04/05/108679.html</guid><wfw:comment>http://www.blogjava.net/fine/comments/108679.html</wfw:comment><comments>http://www.blogjava.net/fine/archive/2007/04/05/108679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fine/comments/commentRss/108679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fine/services/trackbacks/108679.html</trackback:ping><description><![CDATA[
		<span class="red">Java EE5到底有什么系列 – Java Persistence API 1.0( EJB3 Entity Bean)</span>
		<br />作者：黄海波(Charles Huang) <br /><br />Java EE5作为新一代Java企业开发平台的规范，从开始设计就引来了整个java开发社区的注目，引起无数的辩论和带来了众多的期盼。Java EE5作为J2EE平台诞生几近6年后的第4代规范重点关注的是目前java开发的几个热点：开发效率，运行效率和企业应用整合。目标也是让J2EE开发简单，简单再简单。那我们就看看J2EE5规范到底有什么，是否真的能给开发者/企业带来真正的实惠？<br /><br />Java EE5规范是一个所谓的雨伞规范(Umbrella)，在其下是一系列的子规范,主要包括： <br /><br /><div style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"><table class="txt"><tbody><tr><td valign="top">EJB 3.0 (JSR 220)<br />Java Persistence API 1.0 (JSR 220)<br />JSP 2.1 (JSR 245)<br />JSF 1.2 (JSR 252) <br />JAX-WS 2.0 (JSR 224)<br />StAX 1.0 (JSR 173)<br />JAXB 2.0 (JSR 222)<br />Web Services Annotations 1.0 (JSR 181)<br />Common Annotations 1.0 (JSR 250)<br />SAAJ 1.3 maintenance</td><td valign="top">JTA 1.1 maintenance<br />JavaMail 1.4 &amp; JAF 1.1 maintenance<br />JSTL 1.2 maintenance<br />Java EE Mgmt maintenance<br />JACC maintenance<br />Servlet maintenance<br />Java EE Deployment maintenance<br />WSEE maintenance</td></tr></tbody></table></div><br /><br />Java Persistence API 1.0( EJB3 Entity Bean) 在Java EE5中, Entity Bean做为EJB规范中负责持久化的组件将逐渐成为一个历史名词了，作为J2EE 4规范中最为人所垢病的Entity Bean在Java EE5中被推到重来，取而代之的是java开发的通用持久化规范Java Persistence API 1.0, 其实就是完全重新定义了的Entity Bean规范（目前在很多场合中，由于历史原因我们仍然使用ejb3持久化来称呼这个规范）。JPA作为java中负责关系数据持久化的组件已经完全独立出来成为一个单独的规范，而不再属于Enterprise Java Bean的范畴(EJB更多的是指Stateless/Stateful session bean和Message Driven Bean)。<br /><br />Java Persistence AP(JPA)可以说是java持久化技术的一个集大成者，它吸取了Hiberante,JDO,TopLink等优秀技术和框架，将这几年发展成熟起来的基于POJO模型的O/R Mapping技术标准化，成为在J2EE和J2SE环境中通用的java持久化API。值得注意的是Java Persistence API并不是J2EE环境专用，而是在java中的通用API。意味着我们可以在任何需要访问关系数据库的地方使用JPA，甚至包括swing开发的桌面应用。JPA也不要求一定在J2EE容器中才能运行，而是任何有JVM的环境都可以运用。 这就使得我们可以很容易的把JPA作为一个持久化组件自由的和各种容器／框架（EJB3容器, Spring等等）组合。 <br /><br />JPA如何简化原来EJB2中Entity Bean的开发，看一个简单对比：<br /><table class="txt" border="1"><tbody><tr><td valign="top"></td><td valign="top">EJB2.0</td><td>EJB3.0(JPA)</td></tr><tr><td>Business Interface</td><td><pre>public inerface HelloWold extends EJBLocalObject{
    Public String getResult();
}
						</pre></td><td>无需定义接口</td></tr><tr><td>映射配置文件</td><td>编写EJB3 Deployment descriptor</td><td>可选</td></tr><tr><td>EJB实现</td><td valign="top"><pre>public class HelloWorldEntityBean 
         implements HelloWold, EntityBean{
    private int id;
    private String result;
    private EntityContext txt;
   
    public HelloWorldEntityBean(){}
    public void setEntityContext( EntityContext text ){ 
        txt = text;
    }
   
    public String getResult(){ 
        Return result; 
    }
        
    public int getId(){
        return id; 
    }
    
    public void setResult( String result ){ 
        this.result = result;
    }
    
    public String cretaeByName( String name ) throws EJBException{
        .....
    }
   
 }						
						</pre></td><td valign="top"><pre>@Entity
@Table(name=”hellotable”)
public class HelloWoldEntity{   
    @Id
    private int id; p
    private String result; 
    
    public HelloWoldEntity(){} 
    
    public String getResult(){ 
        return result;
    }
    
    public int getId(){
        return id;
    }  
    
    public void setResult( String result ){ 
        this.result = result;
    }
}						
						</pre></td></tr></tbody></table><br />在JPA 中，ejb3的Entity Bean就是一个简单的java bean，即POJO( Plain Old Java Object)。不象EJB2中的EntityBean需要跟容器有密切的关联（EJB2中必须有EntityContext），EJB3 中的entityBean和容器无关，事实上在JPA中，EntityBean也不再称为EntityBean,而是Entity，和Session Bean/Message Driven Bean的仍然存在的EJB区别开来。 <br /><br />为了简化O/R Mapping的配置，JPA大量采用JDK1.5的最重要的新特性annotaion直接在java代码中进行配置的标注。 采用annotation标注O/R Mapping配置可以大幅度减少以往使用xml配置O/R Mapping工作量，提高效率和可维护性。 <br /><br />下面是一个最简单的一对一关联关系采用annotation和xml的配置比较。<br /><img src="http://www.redsoftfactory.com/chinese/images/one2one.jpg" /><table class="txt" border="1"><tbody><tr><td></td><td>Java Persistence API(EJB3 Persistence)</td><td>Hiberante</td></tr><tr><td>配置文件</td><td>可选</td><td>需要</td></tr><tr><td>One-To-One配置</td><td>可选</td><td><pre>&lt;one-to-one        
    name="address"        
    class="com.foo.Address"        
    cascade="All"        
    lazy="false"/&gt;
</pre></td></tr><tr><td>Java代码</td><td><pre>public class Order{     
	@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZYL)    
	Address address;
    ......	
}
						</pre></td><td><pre>public class Order{    
    Address address;
    ......   
}
</pre></td></tr></tbody></table>采用annotation的优势在于： 
<ul><li>减少了配置文件的数量，特别是在实体(Entity)比较多的系统中，维护大量的O/R Mapping xml配置文件是不少的工作量。 
</li><li>减少了配置需要标注的内容。由于annotation由java compiler来编译解析，很多需要在xml配置中显式声明的内容不再需要（比如变量名称，类型，集合中的对象类型等）。 
</li><li>Annotation的编译期检查可以避免xml文件中容易出现的配置语法错误，在IDE中及时发现和纠正。 
</li><li>无需在xml配置文件和java代码中切换，较少思维的跳跃，提高了开发效率。 
</li><li>annotation被编译到java bytecode中，省略了xml的解析过程，极大的提升应用的启动速度和内存占用（特别是Entity多的情况）。 </li></ul>JPA在启动上做了很多程度的简化，使我们能够很容易地在容器内(container)和J2SE环境中使用JPA。JPA拥有一个最基本的工厂类EntityManagerFactory。通过调用这个工厂类的createEntityManager()方法获得EntityManager。所有对实体(Entity)的操作包括持久化，查询，删除等等操作都都定义EntityManager上。 
<div style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"><pre>public interface EntityManager {
    public void persist(Object entity);
    public <t> T merge(T entity);
    public void remove(Object entity);
    public <t> T find(Class<t> entityClass, Object primaryKey);
    public <t> T getReference(Class<t> entityClass, Object primaryKey);
    public void flush();
    public void setFlushMode(FlushModeType flushMode);
    public FlushModeType getFlushMode();
    public void lock(Object entity, LockModeType lockMode);
    public void refresh(Object entity);
    public void clear();
    public boolean contains(Object entity);
    public Query createQuery(String ejbqlString);
    public Query createNamedQuery(String name);
    public Query createNativeQuery(String sqlString);
    public Query createNativeQuery(String sqlString, Class result-
    Class);
    public Query createNativeQuery(String sqlString, String result-
    SetMapping);
    public void close();
    public boolean isOpen();
    public EntityTransaction getTransaction();
}
				
				</t></t></t></t></t></pre></div><br />那又如何获得EntityManagerFactory呢？不管是在J2EE或者J2SE中，都需要通过一个persistence.xml配置文件对EntityMangaerFactory进行配置。下面是一个最简单的persistence.xml的范例。 <br /><div style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"><pre>&lt;entity-manager&gt;
    &lt;name&gt;myEntityManager&gt;/name&gt;
    &lt;provider&gt;com.redsoft.ejb3.PersistenceProviderImpl&gt;/provider&gt;
    &lt;class&gt;com.redsoft.samples.HelloEntityBean&gt;/class&gt;
    &lt;properties&gt;
        &lt;property name="ConnectionDriverName" value="com.mysql.jdbc.Driver"/&gt;
        &lt;property name="ConnectionURL" value="jdbc:mysql://localhost/EJB3Test"/&gt;
        &lt;property name="ConnectionUserName" value="ejb3"/&gt;
        &lt;property name="ConnectionPassword" value="ejb3"/&gt;
   &gt;/properties&gt;
&lt;/entity-manager&gt;

}
				
				</pre></div><br />name – 定了当前这个EntityMangaerFactory的名字，我们可以在一个persistence.xml中定义多个EntityManagerFactory。 <br /><br />Provider – 定了提供EntityManagerFactory的具体实现类。这个实现类由不同的持久化产品开发商提供。例子中采用的是国产红工场的ejb3持久化实现的 EntityManagerFactory实现类。如如果我们需要更换成其他厂商的产品，就需要更换具体的实现类。 <br /><br />class – 列出所有需要被JPA管理的实体类。为了保证在J2SE/J2EE中的通用性和可移植性，JPA要求这里必须列出所有被JPA管理的实体类。 <br /><br />properties – 由持久化厂商自行定义的属性。<br /><br />如果使用JTA事务，也可以使用 <jta-data-source>myDataSource定义。<br /><br />在J2EE容器环境中和J2SE环境中，都是通过读取这个配置文件来初始化EntityMangaerFactory。在J2EE容器环境下，ejb3容器负责读取persistence.xml并初始化EntityManagerFactory，并将EntityManagerFactory帮定到JDNI中，这样我们就可以通过访问JNDI获得EntityManagerFactory, 进而获得EntityManager。由于EJB3容器支持IOC模式，我们也可以通过IOC将EntityMangerFactory直接注射给需要的使用JPA持久化的java类。通过IOC注射的方式获得EntityManagerFactory或者EntityManager是更方便，合理和推荐的方式。 <br /><br />而在J2SE环境中，我们可以通过标准的javax.persistence.Persistence类来获得EntityManagerFactory。Javax.persistence.Persistence会在当前classpath或者jar包的META-INF/下搜索并读persistence.xml后初始化EntityManagerFactory。 <br /><br />下面是一个简单的示例如何在J2SE环境中获得EntityManagerFactory并获得EntityManager,运用EntityManager持久化HelloWorldEntityBean. 
<div style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"><pre>public class HelloWorld {

    public static void main( final String[] args ){

        /*
         * Obtain an EJB3 entity manager
         */
        final EntityManagerFactory emf = Persistence.createEntityManagerFactory();
        final EntityManager entityManager = emf.createEntityManager();

        // Construct a HelloEntityBean
        final HelloEntityBean hello = new HelloEntityBean( 1, "foo" );
        EntityTransaction trans = entityManager.getTransaction();
        trans.begin();
        entityManager.persist( hello );
        trans.commit();
        System.out.println( "Successfully persist hello: " + hello );

        // Look up the HelloEntityBean by primarky key
        final HelloEntityBean anotherHello = entityManager.find( HelloEntityBean.class, new Integer( hello.getId() ) );
        System.out.println( "Found hello: " + anotherHello );

        // close the EntityManager
        entityManager.close();
        emf.close();
    }
}
				</pre></div>事实上不管是在J2SE还是J2EE中我们都可以这样通过javax.persistence.Persistence来初始化EntityManagerFactory。 <br /><br />在上面HelloWorld的例子中我们需要显式调用javax.persistence.Persistence.createEntityManagerFactory, 并且显式地开始事务和关闭事务。在今天大量使用IOC托管容器的时代，这样的编码已经显得落后。 <br /><br />作为J2EE一个部分的JPA自然可以利用EJB3的IOC容器托管事务和注射资源，同样的也可以使用开源IOC容器spring来托管事务和注射资源。红工场也提供了一个开源的<a href="http://sourceforge.net/projects/ejb3daosupport">spring DAO扩展 http://sourceforge.net/projects/ejb3daosupport </a>是来支持JPA和Spring的结合。 <br /><br />下面是一个如何在Spring中托管事务和在DAO中注入EntityManager的配置范例：<br /><div style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"><pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "file://spring-beans.dtd"&gt;

&lt;beans&gt;
	&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;
		&lt;property name="driverClassName"&gt;&lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;&lt;/property&gt;
		&lt;property name="url"&gt;&lt;value&gt;jdbc:mysql://localhost/EJB3Test&lt;/value&gt;&lt;/property&gt;
		&lt;property name="username"&gt;&lt;value&gt;ejb3&lt;/value&gt;&lt;/property&gt;
		&lt;property name="password"&gt;&lt;value&gt;ejb3&lt;/value&gt;&lt;/property&gt;
	&lt;/bean&gt;
	&lt;bean id="entityManagerFactory"
		class="org.springframework.orm.ejb3.LocalEntityManagerFactoryBean"&gt;
		&lt;property name="persistenceInfo"&gt;&lt;ref local="persistenceInfo"/&gt;&lt;/property&gt;
		
	&lt;/bean&gt;
	&lt;bean id="persistenceInfo" class="com.redsoft.ejb3.PersistenceInfoImpl"&gt;
		&lt;property name="nonJtaDataSource"&gt;&lt;ref local="dataSource"/&gt;&lt;/property&gt;
		&lt;property name="entityManagerName"&gt;&lt;value&gt;myEntityManager&lt;/value&gt;&lt;/property&gt;
		&lt;property name="persistenceProviderClassName"&gt;
			&lt;value&gt;
				com.redsoft.ejb3.PersistenceProviderImpl
			&lt;/value&gt;
		&lt;/property&gt;
		&lt;property name="entityClassNames"&gt;
		&lt;list&gt;
			&lt;value&gt;com.redsoft.ejb3.spring.Child&lt;/value&gt;
			&lt;value&gt;com.redsoft.ejb3.spring.Father&lt;/value&gt;
		&lt;/list&gt;
		&lt;/property&gt;
		&lt;property name="properties"&gt;
			&lt;props&gt;
			&lt;prop key="javax.jdo.PersistenceManagerFactoryClass"&gt;
				com.redsoft.jdo.PersistenceManagerFactoryImpl
			&lt;/prop&gt;
			&lt;/props&gt;
		&lt;/property&gt;
	&lt;/bean&gt;
	&lt;bean id="transactionManager" class="org.springframework.orm.ejb3.EJB3TransactionManager"
		singleton="true"&gt;
		&lt;property name="entityManagerFactory"&gt;
			&lt;ref local="entityManagerFactory" /&gt;
		&lt;/property&gt;
	&lt;/bean&gt;
	
	&lt;bean id="dao"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
		singleton="true"&gt;
		&lt;property name="transactionManager"&gt;
			&lt;ref local="transactionManager" /&gt;
		&lt;/property&gt;
		&lt;property name="target"&gt;
			&lt;bean class="com.redsoft.ejb3.spring.DAOImpl"&gt;
				&lt;property name="entityManagerFactory"&gt;
					&lt;ref local="entityManagerFactory" /&gt;
				&lt;/property&gt;
			&lt;/bean&gt;
		&lt;/property&gt;
		&lt;property name="transactionAttributes"&gt;
			&lt;props&gt;
				&lt;prop key="save*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;
				&lt;prop key="remove*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;
				&lt;prop key="del*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;
				&lt;prop key="update*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;
				&lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;
				&lt;prop key="find*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;
				&lt;prop key="query*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;
			&lt;/props&gt;
		&lt;/property&gt;
	&lt;/bean&gt;
&lt;/beans&gt;

				</pre></div>文中的例子可以从红工场主页下载 <a href="http://www.redsoftfactory.com/chinese/index.html">http://www.redsoftfactory.com/chinese/index.html</a></jta-data-source><img src ="http://www.blogjava.net/fine/aggbug/108679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fine/" target="_blank">Peter Pan</a> 2007-04-05 13:30 <a href="http://www.blogjava.net/fine/archive/2007/04/05/108679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>No form found under '****Form' in locale 'zh_CN'</title><link>http://www.blogjava.net/fine/archive/2007/01/19/94952.html</link><dc:creator>Peter Pan</dc:creator><author>Peter Pan</author><pubDate>Fri, 19 Jan 2007 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/fine/archive/2007/01/19/94952.html</guid><wfw:comment>http://www.blogjava.net/fine/comments/94952.html</wfw:comment><comments>http://www.blogjava.net/fine/archive/2007/01/19/94952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fine/comments/commentRss/94952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fine/services/trackbacks/94952.html</trackback:ping><description><![CDATA[javax.servlet.jsp.JspException: No form found under 'employeeForm' in locale 'zh_CN'<br />at org.apache.struts.taglib.html.JavascriptValidatorTag.renderJavascript(JavascriptValidatorTag.java:384)<br />at org.apache.struts.taglib.html.JavascriptValidatorTag.doStartTag(JavascriptValidatorTag.java:349)<br /><br />&lt;html:javascript formName="employeeForm" cdata="false" dynamicJavascript="true" staticJavascript="false"/&gt;<br />在validation.xml中缺少了相应的配置<br />&lt;form name="employeeForm"&gt;<br />          &lt;field property="name" depends="required"&gt;<br />           &lt;arg0 key="employeeForm.name"/&gt;<br />          &lt;/field&gt;<br /> &lt;/form&gt;<img src ="http://www.blogjava.net/fine/aggbug/94952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fine/" target="_blank">Peter Pan</a> 2007-01-19 16:22 <a href="http://www.blogjava.net/fine/archive/2007/01/19/94952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>strutsmenu使用</title><link>http://www.blogjava.net/fine/archive/2006/10/24/77021.html</link><dc:creator>Peter Pan</dc:creator><author>Peter Pan</author><pubDate>Tue, 24 Oct 2006 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/fine/archive/2006/10/24/77021.html</guid><wfw:comment>http://www.blogjava.net/fine/comments/77021.html</wfw:comment><comments>http://www.blogjava.net/fine/archive/2006/10/24/77021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fine/comments/commentRss/77021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fine/services/trackbacks/77021.html</trackback:ping><description><![CDATA[
		<p> public ActionForward execute(<br />   ActionMapping mapping,<br />   ActionForm form,<br />   HttpServletRequest request,<br />   HttpServletResponse response) {<br />   //创建连接<br />   Session session=SessionFactory.currentSession();<br />   //创建事务<br />   Transaction tx=session.beginTransaction();<br />   //创建对话<br />   Query query=session.createQuery("FROM Department");<br />   List list=query.list();<br />   //事务提交<br />   tx.commit();<br />   if(list.size()&lt;0)<br />    return mapping.getInputForward();<br />   MenuRepository repository = new MenuRepository();<br />   HttpSession httpsession=(HttpSession)request.getSession();<br />   ServletContext application=(ServletContext)httpsession.getServletContext();<br />   MenuRepository defaultRepository = (MenuRepository)application.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);<br />   repository.setDisplayers(defaultRepository.getDisplayers());<br />    for (int i=0; i &lt; list.size(); i++) {<br />     MenuComponent mc = new MenuComponent();<br />     <br />     Department mi=(Department) list.get(i);<br />     <br />     String name = "a" + mi.getDepartmentCode();<br />             mc.setName(name);<br />             String parent = "a" + mi.getParentCode();<br />             System.out.println(name + ", parent is: " + parent);<br />             if(parent.equals("a0")){<br />              parent = null;<br />             }<br />             if (parent != null) {<br />                 MenuComponent parentMenu = repository.getMenu(parent);<br />                 if (parentMenu == null) {<br />                     System.out.println("parentMenu '" + parent + "' doesn't exist!");<br />                     // create a temporary parentMenu<br />                     parentMenu = new MenuComponent();<br />                     parentMenu.setName(parent);<br />                     repository.addMenu(parentMenu);<br />                 }<br />                 mc.setParent(parentMenu);<br />             }<br />             String title = mi.getDepartmentName();<br />             mc.setTitle(title);<br />             <br />           <br />             mc.setLocation("index.jsp");<br />             repository.addMenu(mc);<br />   }<br />    request.setAttribute("repository", repository);<br />   return mapping.findForward("okGo");<br />  }<br />jsp中<br />&lt;%@ page contentType="text/html;charset=UTF-8" language="java"%&gt; <br />&lt;%@ taglib uri="/WEB-INF/struts-menu.tld" prefix="menu" %&gt;<br />&lt;%@ taglib uri="/WEB-INF/struts-menu-el.tld" prefix="menu-el" %&gt;<br />&lt;%@ taglib uri="/WEB-INF/c.tld" prefix="c" %&gt;<br /><br />    &lt;link rel="stylesheet" type="text/css" media="all"<br />        href="&lt;c:url value="/styles/menuExpandable.css"/&gt;" /&gt;<br />     <br />     &lt;script type="text/javascript"<br />        src="&lt;c:url value="/scripts/menuExpandable.js"/&gt;"&gt;&lt;/script&gt;<br />    &lt;link rel="stylesheet" type="text/css" media="all"<br />        href="&lt;c:url value="/styles/xtree.css"/&gt;" /&gt;<br />    &lt;script type="text/javascript"<br />        src="&lt;c:url value="/scripts/xtree.js"/&gt;"&gt;&lt;/script&gt;<br />        <br />    &lt;link rel="stylesheet" type="text/css" media="screen"<br />        href="&lt;c:url value="/styles/global.css"/&gt;" /&gt;<br />        <br />        <br />    &lt;script type="text/javascript"&gt;<br />        /* Function for showing and hiding elements that use 'display:none' to hide */<br />        function toggleDisplay(targetId) {<br />            if (document.getElementById) {<br />                target = document.getElementById(targetId);<br />                if (target.style.display == "none"){<br />                    target.style.display = "";<br />                } else {<br />                    target.style.display = "none";<br />                }<br />            }<br />        }<br />    &lt;/script&gt;<br />   &lt;!-- <br />    &lt;div class="dynamicMenu tree"&gt;<br />        &lt;menu:useMenuDisplayer name="ListMenu" repository="repository"&gt;<br />            &lt;menu:displayMenu name="a01"/&gt;<br />            &lt;menu:displayMenu name="a02"/&gt;<br />        &lt;/menu:useMenuDisplayer&gt;<br />    &lt;/div&gt;<br />    <br />    &lt;div class="dynamicMenu tree"&gt;<br />    &lt;script type="text/javascript"&gt;<br />        &lt;menu:useMenuDisplayer name="Velocity" config="/templates/xtree.html"<br />            repository="repository"&gt;<br />          &lt;c:forEach var="menu" items="${repository.topMenus}"&gt;<br />            &lt;menu-el:displayMenu name="${menu.name}"/&gt;<br />          &lt;/c:forEach&gt;<br />        &lt;/menu:useMenuDisplayer&gt;<br />    &lt;/script&gt;<br />    &lt;/div&gt;<br />    --&gt;<br /> &lt;div id="content"&gt;<br /> &lt;script type="text/javascript" src="&lt;c:url value="/scripts/coolmenus3.js"/&gt;"&gt;&lt;/script&gt;<br /> &lt;script type="text/javascript" src="&lt;c:url value="/scripts/coolmenu-config.js"/&gt;"&gt;&lt;/script&gt;<br />        &lt;menu:useMenuDisplayer name="CoolMenu"  repository="repository"&gt;<br />            &lt;menu:displayMenu name="a01"/&gt;<br />            &lt;menu:displayMenu name="a02"/&gt;<br />        &lt;/menu:useMenuDisplayer&gt;<br />    &lt;/div&gt;<br />menu-config.xml<br />&lt;?xml version="1.0" encoding="UTF-8" ?&gt;</p>
		<p>&lt;MenuConfig&gt;</p>
		<p>  &lt;Displayers&gt;<br />    &lt;Displayer   name="DropDown"<br />                 type="net.sf.navigator.displayer.DropDownMenuDisplayer"/&gt;<br />    &lt;Displayer   name="Simple"<br />                 type="net.sf.navigator.displayer.SimpleMenuDisplayer"/&gt;<br />    &lt;Displayer   name="CoolMenu"<br />                 type="net.sf.navigator.displayer.CoolMenuDisplayer"/&gt;<br />    &lt;Displayer   name="CoolMenu4"<br />                 type="net.sf.navigator.displayer.CoolMenuDisplayer4"/&gt;<br />    &lt;Displayer   name="MenuForm"<br />                 type="net.sf.navigator.example.PermissionsFormMenuDisplayer"/&gt;<br />    &lt;Displayer   name="ListMenu"<br />                 type="net.sf.navigator.displayer.ListMenuDisplayer"/&gt;<br />    &lt;Displayer   name="TabbedMenu"<br />                 type="net.sf.navigator.displayer.TabbedMenuDisplayer"/&gt;<br />    &lt;Displayer   name="Velocity"<br />                 type="net.sf.navigator.displayer.VelocityMenuDisplayer"/&gt;<br />  &lt;/Displayers&gt;</p>
		<p>  &lt;Menus&gt;<br />  <br />  &lt;/Menus&gt;</p>
		<p>&lt;/MenuConfig&gt;<br /></p>
<img src ="http://www.blogjava.net/fine/aggbug/77021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fine/" target="_blank">Peter Pan</a> 2006-10-24 16:56 <a href="http://www.blogjava.net/fine/archive/2006/10/24/77021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xdoclet1.2.3&amp;xdoclet2</title><link>http://www.blogjava.net/fine/archive/2006/09/27/72349.html</link><dc:creator>Peter Pan</dc:creator><author>Peter Pan</author><pubDate>Wed, 27 Sep 2006 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/fine/archive/2006/09/27/72349.html</guid><wfw:comment>http://www.blogjava.net/fine/comments/72349.html</wfw:comment><comments>http://www.blogjava.net/fine/archive/2006/09/27/72349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fine/comments/commentRss/72349.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fine/services/trackbacks/72349.html</trackback:ping><description><![CDATA[
		<h4 class="TextColor1" id="subjcns!49386EA353D8F86F!425" style="MARGIN-BOTTOM: 0px">用xdoclet 和xdoclet2来产生hiberante map文件的一些区别</h4>
		<div id="msgcns!49386EA353D8F86F!425">
				<div>xdoclet升级到1.2.3了，文档上说是支持hibernate 3了，实际上，经过今天的检验，发现xdoclet 1.2.3只是支持hibernate 3的map文件了，而生成的hibernate 3的config文件，却还hibernate 2的。</div>
				<div> </div>
				<div>一个简单的例子（就是这个例子：<a href="http://www.redsaga.com/hibernate-ref/3.1.2/zh-cn/html/tutorial.html#tutorial-firstapp-firstclass"><font color="#fb8639">ttp://www.redsaga.com/hibernate-ref/3.1.2/zh-cn/html/tutorial.html#tutorial-firstapp-firstclass</font></a>，按它上面的介绍，设置好各个目录结构）：</div>
				<div>package events;</div>
				<div>import java.util.Date;</div>
				<div>/**<br /> *<br /> * @hibernate.class table="EVENTS"<br /> */<br />public class Event {</div>
				<div>
						<br />    private Long id;</div>
				<div>    private String title;<br />    private Date date;</div>
				<div>    public Event() {<br />    }</div>
				<div>    /**<br />     * @hibernate.id<br />     * generator-class="uuid.hex"<br />     * type="java.lang.String"<br />     * unsaved-value=""<br />     * column="EVENT_ID"<br />     */<br />    public Long getId() {<br />        return id;<br />    }</div>
				<div>    private void setId(Long id) {<br />        this.id = id;<br />    }</div>
				<div>    /**<br />     * @hibernate.property<br />     * column="EVENT_DATE"<br />     * type = "timestamp"<br />     *<br />     *<br />     */<br />    public Date getDate() {<br />        return date;<br />    }</div>
				<div>    public void setDate(Date date) {<br />        this.date = date;<br />    }</div>
				<div>    /**<br />     * @hibernate.property<br />     * column="EVENT_TITLE"<br />     * length="20"<br />     *<br />     */<br />    public String getTitle() {<br />        return title;<br />    }</div>
				<div>    public void setTitle(String title) {<br />        this.title = title;<br />    }</div>
				<div>}<br /></div>
				<div> </div>
				<div>上面的POJO，已经加上了xdoclet的javadoc tag了，现在用下面的ant文件来产生map和config文件：</div>
				<div> </div>
				<div>&lt;project name="xdoclet" default="hibernatedoclet"&gt;<br />    &lt;property name="sourcedir" value="${basedir}/src"/&gt;<br />    &lt;property name="targetdir" value="${basedir}/bin"/&gt;<br />    &lt;property name="librarydir" value="${basedir}/lib"/&gt;</div>
				<div>    &lt;path id="libraries"&gt;<br />        &lt;fileset dir="${librarydir}"&gt;<br />            &lt;include name="*.jar"/&gt;<br />        &lt;/fileset&gt;<br />    &lt;/path&gt;</div>
				<div>    &lt;target name="clean"&gt;<br />        &lt;delete dir="${targetdir}"/&gt;<br />        &lt;mkdir dir="${targetdir}"/&gt;<br />    &lt;/target&gt;</div>
				<div>    &lt;target name="compile" depends="clean, copy-resources"&gt;<br />        &lt;javac srcdir="${sourcedir}"<br />               destdir="${targetdir}"<br />               classpathref="libraries"/&gt;<br />    &lt;/target&gt;</div>
				<div>    &lt;target name="copy-resources"&gt;<br />        &lt;copy todir="${targetdir}"&gt;<br />            &lt;fileset dir="${sourcedir}"&gt;<br />                &lt;exclude name="**/*.java"/&gt;<br />            &lt;/fileset&gt;<br />        &lt;/copy&gt;<br />    &lt;/target&gt;</div>
				<div>    &lt;taskdef name="hibernatedoclet" classname="xdoclet.modules.hibernate.HibernateDocletTask"&gt;<br />       &lt;classpath&gt;<br />             &lt;fileset dir="E:/workspace/xdoclet-1.2.3/lib" includes="*.jar"/&gt;<br />        &lt;/classpath&gt;<br />    &lt;/taskdef&gt;</div>
				<div>    &lt;target name="hibernate" depends="compile" description="Generate mapping documents"&gt;<br />          &lt;hibernatedoclet<br />                destdir="${targetdir}"<br />                excludedtags="@version,@author,@todo,@see"<br />                force="false"<br />                verbose="true"&gt;</div>
				<div>                &lt;fileset dir="${sourcedir}"&gt;<br />                    &lt;include name="**/*.java"/&gt;<br />                &lt;/fileset&gt;</div>
				<div>                &lt;hibernatecfg<br />                        dialect="net.sf.hibernate.dialect.xxxxx"<br />                        driver="com.mysql.jdbc.Driver"<br />                        jdbcUrl="jdbc:mysql://xxxxx"<br />                        userName="xxxxx"<br />                        password="xxxxx"/&gt;<br />                        <br />                 &lt;hibernate version="3.0"/&gt;</div>
				<div>            &lt;/hibernatedoclet&gt;<br />        &lt;/target&gt;</div>
				<div>&lt;/project&gt;</div>
				<div> </div>
				<div>结果如下：</div>
				<div>Event.hbm.xml：</div>
				<div>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</div>
				<div>&lt;!DOCTYPE hibernate-mapping PUBLIC<br />    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" <br />    "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><font color="#fb8639">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</font></a>"&gt;</div>
				<div>&lt;hibernate-mapping<br />&gt;<br />    &lt;class<br />        name="events.Event"<br />        table="EVENTS"<br />    &gt;</div>
				<div>        &lt;id<br />            name="id"<br />            column="EVENT_ID"<br />            type="java.lang.String"<br />            unsaved-value=""<br />        &gt;<br />            &lt;generator class="uuid.hex"&gt;<br />              &lt;!--  <br />                  To add non XDoclet generator parameters, create a file named <br />                  hibernate-generator-params-Event.xml <br />                  containing the additional parameters and place it in your merge dir. <br />              --&gt; <br />            &lt;/generator&gt;<br />        &lt;/id&gt;</div>
				<div>        &lt;property<br />            name="date"<br />            type="timestamp"<br />            update="true"<br />            insert="true"<br />            column="EVENT_DATE"<br />        /&gt;</div>
				<div>        &lt;property<br />            name="title"<br />            type="java.lang.String"<br />            update="true"<br />            insert="true"<br />            column="EVENT_TITLE"<br />            length="20"<br />        /&gt;</div>
				<div>        &lt;!--<br />            To add non XDoclet property mappings, create a file named<br />                hibernate-properties-Event.xml<br />            containing the additional properties and place it in your merge dir.<br />        --&gt;</div>
				<div>    &lt;/class&gt;</div>
				<div>&lt;/hibernate-mapping&gt;<br /></div>
				<div>hibernate.cfg.xml：</div>
				<div>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 2.0//EN" "<a href="http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"><font color="#fb8639">http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd</font></a>"&gt;</div>
				<div>&lt;!-- Generated file - Do not edit! --&gt;</div>
				<div>&lt;hibernate-configuration&gt;</div>
				<div> &lt;!-- a SessionFactory instance listed as /jndi/name --&gt;<br /> &lt;session-factory&gt;</div>
				<div>  &lt;!-- properties --&gt;<br />  &lt;property name="dialect"&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/property&gt;<br />  &lt;property name="show_sql"&gt;false&lt;/property&gt;<br />  &lt;property name="use_outer_join"&gt;false&lt;/property&gt;<br />   &lt;property name="connection.username"&gt;hibernate&lt;/property&gt;<br />   &lt;property name="connection.password"&gt;aPassword&lt;/property&gt;<br />   &lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;<br />   &lt;property name="connection.url"&gt;jdbc:mysql://xxx&lt;/property&gt;</div>
				<div>  &lt;!-- mapping files --&gt;<br />  &lt;mapping resource="events/Event.hbm.xml"/&gt;<br /> &lt;/session-factory&gt;</div>
				<div>&lt;/hibernate-configuration&gt;<br /></div>
				<div>发现没有，上面的config文件中的DTD版本还是2.0。</div>
				<div> </div>
				<div>
						<hr />
				</div>
				<div>对于hibernate3来说，现在多了个选择，用xdoclet2也可以产生map文件，但是config文件好像没有办法。</div>
				<div>还是用上面POJO，对应的ant文件如下（注意，简单起见，要把xdoclet2下面的lib目录下的jar文件，全部copy到${basedir}/lib下）：</div>
				<div>&lt;project name="xdoclet2-plugin" default="hibernatedoclet"&gt;</div>
				<div>    &lt;property name="sourcedir" value="${basedir}/src"/&gt;<br />    &lt;property name="targetdir" value="${basedir}/bin"/&gt;<br />     &lt;property name="librarydir" value="${basedir}/lib"/&gt;</div>
				<div> </div>
				<div>    &lt;path id="libraries"&gt;<br />        &lt;fileset dir="${librarydir}"&gt;<br />            &lt;include name="*.jar"/&gt;<br />        &lt;/fileset&gt;<br />    &lt;/path&gt;</div>
				<div>    &lt;target name="clean"&gt;<br />        &lt;delete dir="${targetdir}"/&gt;<br />        &lt;mkdir dir="${targetdir}"/&gt;<br />    &lt;/target&gt;</div>
				<div>    &lt;target name="compile" depends="clean, copy-resources"&gt;<br />        &lt;javac srcdir="${sourcedir}"<br />               destdir="${targetdir}"<br />               classpathref="libraries"/&gt;<br />    &lt;/target&gt;</div>
				<div>    &lt;target name="copy-resources"&gt;<br />        &lt;copy todir="${targetdir}"&gt;<br />            &lt;fileset dir="${sourcedir}"&gt;<br />                &lt;exclude name="**/*.java"/&gt;<br />            &lt;/fileset&gt;<br />        &lt;/copy&gt;<br />    &lt;/target&gt;</div>
				<div>    &lt;target name="hibernatedoclet"<br />            depends="compile"<br />            description="Generate Persistence and form classes"&gt;<br />            &lt;taskdef<br />                name="xdoclet"<br />                classname="org.xdoclet.ant.XDocletTask"<br />                classpathref="libraries"<br />                /&gt;<br />            &lt;xdoclet&gt;<br />                &lt;!-- defines the file handled by xdoclet2 --&gt;<br />                &lt;fileset dir="${sourcedir}"&gt;<br />                    &lt;include name="**/*.java"/&gt;<br />                &lt;/fileset&gt;<br />                &lt;!-- defines the processing of a plugin --&gt;<br />                &lt;component<br />                    classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin"<br />                    destdir="${targetdir}"<br />                    version="3.0"<br />                    /&gt;<br />            &lt;/xdoclet&gt;<br /></div>
				<div>        &lt;/target&gt;</div>
				<div>
						<br />&lt;/project&gt;</div>
				<div> </div>
				<div>结果如下：</div>
				<div>Event.hbm.xml：</div>
				<div>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><font color="#fb8639">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</font></a>"&gt;</div>
				<div>&lt;hibernate-mapping&gt;<br />  &lt;class table="EVENTS" name="events.Event"&gt;<br />    &lt;id type="java.lang.String" column="EVENT_ID" unsaved-value="" access="method" name="id"&gt;<br />      &lt;generator class="uuid.hex"/&gt;<br />    &lt;/id&gt;<br />    &lt;property name="date" type="timestamp" access="method" column="EVENT_DATE"/&gt;<br />    &lt;property name="title" length="20" access="method" column="EVENT_TITLE"/&gt;<br />  &lt;/class&gt;<br />&lt;/hibernate-mapping&gt;<br /></div>
				<div>发现用xdoclet1.2.3和xdoclet2产生的map文件还是有些区别的，包括形式和内容，也许那些区别都无所谓，但是毕竟有不同。从形式来看，明星xdoclet2产生的文件好看些，所以，以后，我看还是应该用xdoclet2来产生map文件。config文件，就手写吧。</div>
				<div> </div>
				<div>
						<hr />
 </div>
				<div>
						<font color="#ff0000">
								<strong>应用 xdoclet1.2.3和xdoclet2，要注意的最大的一点是：POJO的javadoc tag中的所有@hibernate.collection-xxxxx都已经改变成@hibernate.xxxx了。所以，对已有的POJO应用xdoclet2时，可能要做个简单的替换工作。</strong>
						</font>
				</div>
		</div>
<img src ="http://www.blogjava.net/fine/aggbug/72349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fine/" target="_blank">Peter Pan</a> 2006-09-27 17:30 <a href="http://www.blogjava.net/fine/archive/2006/09/27/72349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass</title><link>http://www.blogjava.net/fine/archive/2006/08/10/62715.html</link><dc:creator>Peter Pan</dc:creator><author>Peter Pan</author><pubDate>Thu, 10 Aug 2006 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/fine/archive/2006/08/10/62715.html</guid><wfw:comment>http://www.blogjava.net/fine/comments/62715.html</wfw:comment><comments>http://www.blogjava.net/fine/archive/2006/08/10/62715.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fine/comments/commentRss/62715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fine/services/trackbacks/62715.html</trackback:ping><description><![CDATA[
		<h4 class="TextColor1" id="subjcns!7402FE22C9C83675!198" style="MARGIN-BOTTOM: 0px">java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass</h4>
		<div id="msgcns!7402FE22C9C83675!198">
				<div>
						<strong>Problem with Spring 1.2.6 and Hibernate 3.1 : HbmBinder$SecondPass</strong>
						<br />
				</div>
				<div>
						<br />今天又遇到了这个问题，真是让人郁闷了老半天。一心揪出它的根本原因，经过了好半天的刺挠终于找到了就是(hibernate3.jar和hibernate-annotations.jar)的问题，简单主法把hibernate-annotations.jar直接干掉就ＯＫ了。<br />好果有用到这个包就得去找个高点version的去用了。<br />不知道大家有没有更好的解决方法呀<br /><br />Exception in thread "main" org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext-hibernate.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass<br />java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass<br />at java.lang.ClassLoader.defineClass1(Native Method)<br />at java.lang.ClassLoader.defineClass(ClassLoader.java :620)<br />at java.security.SecureClassLoader.defineClass(Secure ClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader .java:260)<br />at java.net.URLClassLoader.access$100(URLClassLoader. java:56)<br />at java.net.URLClassLoader$1.run(URLClassLoader.java: 195)<br />at java.security.AccessController.doPrivileged(Native Method)<br />at java.net.URLClassLoader.findClass(URLClassLoader.j ava:188)<br />at java.lang.ClassLoader.loadClass(ClassLoader.java:3 06)<br />at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:268)<br />at java.lang.ClassLoader.loadClass(ClassLoader.java:2 51)<br />at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)<br />at org.hibernate.cfg.Configuration.add(Configuration. java:385)<br />at org.hibernate.cfg.Configuration.addInputStream(Con figuration.java:426)<br />at org.springframework.orm.hibernate3.LocalSessionFac toryBean.afterPropertiesSet(LocalSessionFactoryBea n.java:654)<br />at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:1059)<br />at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:363)<br />at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:226)<br />at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:147)<br />at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:269)<br />at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:320)<br />at org.springframework.context.support.ClassPathXmlAp plicationContext.&lt;init&gt;(ClassPathXmlApplicationCon text.java:87)<br />at org.springframework.context.support.ClassPathXmlAp plicationContext.&lt;init&gt;(ClassPathXmlApplicationCon text.java:72)<br />at org.stockfi.persistence.orm.hibernate.core.Main.ma in(Main.java:57)<br /></div>
				<div> </div>
				<div> </div>
				<div>reason is:It seems that <b>org\hibernate\cfg\HbmBinder$SecondPass.class</b> no longer exists in hibernate3.jar.<br />Specifically, the hibernate3.jar that ships with Spring 1.2.7 appears to be Hibernate v3.0.5. This version of the jar does indeed include the org/hibernate/cfg/HbmBinder$SecondPass class. When I remove this version of hibernate3.jar and replace it with the latest and greatest hibernate3.jar this problem arises. The latest version of Hibernate (hibernate3.jar) is v3.1.3. <br /><br />By simply inspecting the contents of the hibernate3.jar files you will see this problem.<br /><br />This leads me to believe that we must use the hibernate3.jar that ships with Spring v.1.2.7 (or whatever version people are using with respect to 1.2.x). <br /><br />My immediate concern is that itermixing Hibernate 3.1.3 support/dependency jars with a v3.0.5 hibernate3.jar may cause issues. I suppose I will need to download and use Hibernate 3.0.5 to be safe but I'd like very much to use Hibernate 3.1.3 w/o concern.<br /><br />Any ideas on whether a patch/update will be made available to get around this issue.</div>
				<div>
						<br /> </div>
				<div>See if there's been any issue raised on this topic. I know this topic has been discussed several times but always the solution was using the proper jars (and eliminating old ones which were used as dependencies as already noted in this thread).<br />I've used spring with HB 3.1.3 and 3.0.5 without problems and by looking at the stacktrace, the problem is with hibernate (which actually calls the missing class) and not with Spring.</div>
		</div>
<img src ="http://www.blogjava.net/fine/aggbug/62715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fine/" target="_blank">Peter Pan</a> 2006-08-10 09:23 <a href="http://www.blogjava.net/fine/archive/2006/08/10/62715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>