GraniteDS、Spring、Toplink集成的配置

配置的目的是集成granite data service ,Spring,Toplink,JPA,flex,依托adobe AMF协议进行RIA开发,测试集成的难度与开发的速度。

先贴上granite data service配置文件,关于spring配置请参考

springtoplink集成显式事务配置

/WEB-INF/Granite/granite-config.xml

 

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE granite-config PUBLIC "-//Granite Data Services//DTD granite-config internal//EN"  
  3.     "http://www.graniteds.org/public/dtd/1.2.0/granite-config.dtd">  
  4. <granite-config>  
  5.     <classgetter type="org.granite.toplink.TopLinkClassGetter"/>  
  6.     <externalizers>  
  7.         <externalizer type="org.granite.toplink.TopLinkExternalizer">  
  8.                
  9.             <include annotatedwith="javax.persistence.Entity" />  
  10.             <include annotatedwith="javax.persistence.MappedSuperclass" />  
  11.             <include annotatedwith="javax.persistence.Embeddable" />  
  12.             <!– 
  13.             <include type="org.test.model.Post"/> 
  14.             –>  
  15.         </externalizer>  
  16.     </externalizers>  
  17. </granite-config>  

/WEB-INF/flex/services-config.xml

 

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <services-config>  
  4.   
  5.     <services>  
  6.         <service  
  7.             id="granite-service"  
  8.             class="flex.messaging.services.RemotingService"  
  9.             messageTypes="flex.messaging.messages.RemotingMessage">  
  10.             <destination id="postService">  
  11.                 <channels>  
  12.                     <channel ref="my-graniteamf"/>  
  13.                 </channels>  
  14.                 <properties>  
  15.                     <factory>springFactory</factory>  
  16.                     <source>postService</source>  
  17.                 </properties>  
  18.             </destination>  
  19.         </service>  
  20.     </services>  
  21.     <factories>  
  22.         <factory id="springFactory" class="org.granite.messaging.service.SpringServiceFactory"/>  
  23.     </factories>  
  24.     <channels>  
  25.         <channel-definition id="my-graniteamf" class="mx.messaging.channels.AMFChannel">  
  26.             <endpoint  
  27.                 uri="http://{server.name}:{server.port}/{context.root}/graniteamf/amf"  
  28.                 class="flex.messaging.endpoints.AMFEndpoint"/>  
  29.         </channel-definition>  
  30.     </channels>  
  31.   
  32. </services-config>  

/META-INF/granite-config.properties

#for toplink

classGetter=org.granite.toplink.TopLinkClassGetter

/WEB-INF/web.xml

 

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  5.     <description>  
  6.         my first Granite Data Service and Spring framework  
  7.     </description>  
  8.     <display-name>GraniteDS Spring</display-name>  
  9.     <context-param>  
  10.         <description>Path to spring config</description>  
  11.         <param-name>contextConfigLocation</param-name>  
  12.         <param-value>  
  13.             /WEB-INF/classes/applicationContext.xml  
  14.         </param-value>  
  15.     </context-param>  
  16.     <context-param>  
  17.         <param-name>graniteConfigPath</param-name>  
  18.         <param-value>/WEB-INF/granite/granite-config.xml</param-value>  
  19.     </context-param>  
  20.     <context-param>  
  21.         <param-name>servicesConfigPath</param-name>  
  22.         <param-value>/WEB-INF/flex/services-config.xml</param-value>  
  23.     </context-param>  
  24.     <filter>  
  25.         <filter-name>AMFMessageFilter</filter-name>  
  26.         <filter-class>  
  27.             org.granite.messaging.webapp.AMFMessageFilter  
  28.         </filter-class>  
  29.     </filter>  
  30.     <filter-mapping>  
  31.         <filter-name>AMFMessageFilter</filter-name>  
  32.         <url-pattern>/graniteamf/*</url-pattern>  
  33.     </filter-mapping>  
  34.     <listener>  
  35.         <listener-class>  
  36.             org.springframework.web.context.ContextLoaderListener  
  37.         </listener-class>  
  38.     </listener>  
  39.     <listener>  
  40.         <listener-class>  
  41.             org.springframework.web.context.request.RequestContextListener  
  42.         </listener-class>  
  43.     </listener>  
  44.     <listener>  
  45.         <listener-class>  
  46.             org.granite.config.GraniteConfigListener  
  47.         </listener-class>  
  48.     </listener>  
  49.     <servlet>  
  50.         <servlet-name>AMFMessageServlet</servlet-name>  
  51.         <servlet-class>  
  52.             org.granite.messaging.webapp.AMFMessageServlet  
  53.         </servlet-class>  
  54.         <load-on-startup>1</load-on-startup>  
  55.     </servlet>  
  56.     <servlet-mapping>  
  57.         <servlet-name>AMFMessageServlet</servlet-name>  
  58.         <url-pattern>/graniteamf/*</url-pattern>  
  59.     </servlet-mapping>  
  60.     <welcome-file-list>  
  61.         <welcome-file>index.jsp</welcome-file>  
  62.     </welcome-file-list>  
  63.     <login-config>  
  64.         <auth-method>BASIC</auth-method>  
  65.     </login-config>  
  66. </web-app>  

 案例代码下载:点击下载此文件

spring和toplink集成显式事务配置

最近在学习granite data service 与Spring、toplink、JPA,flex集成,关于Spring事务配置折腾了我一天,刚找到对我有用的配置例子,详细见spring事务配置方法(TransactionProxyFactoryBean)。现将配置文件放上来便于以后整理。

applicationContext.xml

 

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx">  
  6.   
  7.     <bean  
  8.         class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />  
  9.   
  10.     <bean id="entityManagerFactory"  
  11.         class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">  
  12.         <property name="persistenceUnitName" value="GDSSpringDemoPU" />  
  13.         <property name="jpaVendorAdapter">  
  14.             <bean  
  15.                 class="org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter">  
  16.                 <property name="showSql" value="true" />  
  17.                 <property name="generateDdl" value="true" />  
  18.             </bean>  
  19.         </property>  
  20.     </bean>  
  21.   
  22.     <bean id="transactionManager"  
  23.         class="org.springframework.orm.jpa.JpaTransactionManager">  
  24.         <property name="entityManagerFactory"  
  25.             ref="entityManagerFactory" />  
  26.         <!– 
  27.             <property name="dataSource" ref="dataSource" /> 
  28.         –>  
  29.     </bean>  
  30.     <bean id="postService"  
  31.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
  32.         <property name="transactionManager" ref="transactionManager" />  
  33.         <property name="target">  
  34.             <bean class="org.test.PostService">  
  35.                 <property name="pdao" ref="PostDAO" />  
  36.             </bean>  
  37.         </property>  
  38.         <property name="transactionAttributes">  
  39.             <props>  
  40.                 <prop key="save*">PROPAGATION_REQUIRED</prop>  
  41.                 <prop key="create*">PROPAGATION_REQUIRED</prop>  
  42.                 <prop key="delete*">PROPAGATION_REQUIRED</prop>  
  43.                 <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>  
  44.             </props>  
  45.         </property>  
  46.     </bean>  
  47.   
  48.     <tx:annotation-driven transaction-manager="transactionManager" />  
  49.     <bean id="PostDAO" class="org.test.model.PostDAO">  
  50.         <property name="entityManagerFactory"  
  51.             ref="entityManagerFactory" />  
  52.     </bean>  
  53.      
  54.     <!–  
  55.         <bean id="postService" class="org.test.PostService">  
  56.         <property name="pdao" ref="PostDAO" />  
  57.         </bean>  
  58.     –>  
  59. </beans>  

persistence.xml

 

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <persistence xmlns="http://java.sun.com/xml/ns/persistence"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  
  5.     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">  
  6.       
  7.     <persistence-unit name="GDSSpringDemoPU"  
  8.         transaction-type="RESOURCE_LOCAL">  
  9.         <provider>  
  10.             oracle.toplink.essentials.PersistenceProvider  
  11.         </provider>  
  12.         <class>org.test.model.Post</class>  
  13.         <properties>  
  14.             <property name="toplink.jdbc.driver"  
  15.                 value="org.apache.derby.jdbc.ClientDriver" />  
  16.             <property name="toplink.jdbc.url"  
  17.                 value="jdbc:derby://localhost:1527/myeclipse" />  
  18.             <property name="toplink.jdbc.user" value="classiccars" />  
  19.             <property name="toplink.jdbc.password" value="myeclipse" />  
  20.         </properties>  
  21.     </persistence-unit>  
  22.   
  23. </persistence>  

 

spring事务配置方法(TransactionProxyFactoryBean)

采用这种方式的配置时候,配置文件的增加非常快,每个bean有需要两个bean配置,一个目标,另外还需要使用TransactionProxyFactoryBean配置一个代理bean。
这是一种最原始的配置方式,下面是使用TransactionProxyFactoryBean的配置文件:

Xml代码
  1. <?xml version="1.0" encoding="gb2312"?>
  2. <!– Spring配置文件的文件头,包含DTD等信息–>
  3. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
  4. "http://www.springframework.org/dtd/spring-beans.dtd">
  5. <beans>
  6. <!–定义数据源–>
  7. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  8. <!– 定义数据库驱动–>
  9. <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
  10. <!– 定义数据库url–>
  11. <property name="url"><value>jdbc:mysql://localhost:3306/spring</value></property>
  12. <!– 定义数据库用户名–>
  13. <property name="username"><value>root</value></property>
  14. <!– 定义数据库密码–>
  15. <property name="password"><value>32147</value></property>
  16. </bean>
  17. <!–定义一个hibernate的SessionFactory–>
  18. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  19. <!– 定义SessionFactory必须注入DataSource–>
  20. <property name="dataSource"><ref local="dataSource"/></property>
  21. <property name="mappingResources">
  22. <list>
  23. <!–以下用来列出所有的PO映射文件–>
  24. <value>Person.hbm.xml</value>
  25. </list>
  26. </property>
  27. <property name="hibernateProperties">
  28. <props>
  29. <!–此处用来定义hibernate的SessionFactory的属性:
  30. 不同数据库连接,启动时选择create,update,create-drop–>
  31. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  32. <prop key="hibernate.hbm2ddl.auto">update</prop>
  33. </props>
  34. </property>
  35. </bean>
  36. <!– 定义事务管理器,使用适用于Hibernte的事务管理器–>
  37. <bean id="transactionManager"
  38. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  39. <!– HibernateTransactionManager bean需要依赖注入一个SessionFactory bean的引用–>
  40. <property name="sessionFactory"><ref local="sessionFactory"/></property>
  41. </bean>
  42. <!–定义DAO Bean , 作为事务代理的目标–>
  43. <bean id="personDaoTarget" class="lee.PersonDaoHibernate">
  44. <!– 为DAO bean注入SessionFactory引用–>
  45. <property name="sessionFactory"><ref local="sessionFactory"/></property>
  46. </bean>
  47. <!– 定义DAO bean的事务代理–>
  48. <bean id="personDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  49. <!– 为事务代理bean注入事务管理器–>
  50. <property name="transactionManager"><ref bean="transactionManager"/></property>
  51. <!– 设置事务属性–>
  52. <property name="transactionAttributes">
  53. <props>
  54. <!– 所有以find开头的方法,采用required的事务策略,并且只读–>
  55. <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
  56. <!– 其他方法,采用required的事务策略 ->
  57. <prop key="*">PROPAGATION_REQUIRED</prop>
  58. </props>
  59. </property>
  60. <!– 为事务代理bean设置目标bean –>
  61. <property name="target">
  62. <ref local="personDaoTarget"/>
  63. </property>
  64. </bean>
  65. </beans>
     

在上面的配置文件中,personDao需要配置两个部分,一个是personDao的目标bean,该目标bean是实际DAO bean,以实际的DAO bean为目标,建立事务代理。一个组件,需要来个bean组成,一个目标bean,一个事务代理。
这种配置方式还有一个坏处:目标bean直接暴露在Spring容器中,可以直接引用,如果目标bean被误引用,将导致业务操作不具备事务性。
为了避免这种现象,可将目标bean配置成嵌套bean,下面是目标bean和事务代理的配置片段:

Xml代码
  1. <!– 定义DAO bean的事务代理–>
  2. <bean id="personDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  3. <!– 为事务代理bean注入事务管理器–>
  4. <property name="transactionManager"><ref bean="transactionManager"/></property>
  5. <!– 设置事务属性–>
  6. <property name="transactionAttributes">
  7. <props>
  8. <!– 所有以find开头的方法,采用required的事务策略,并且只读–>
  9. <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
  10. <!– 其他方法,采用required的事务策略 ->
  11. <prop key="*">PROPAGATION_REQUIRED</prop>
  12. </props>
  13. </property>
  14. <!– 为事务代理bean设置目标bean –>
  15. <property name="target">
  16. <!– 采用嵌套bean配置目标bean–>
  17. <bean class="lee.PersonDaoHibernate">
  18. <!– 为DAO bean注入SessionFactory引用–>
  19. <property name="sessionFactory"><ref local="sessionFactory"/></property>
  20. </bean>
  21. </property>
  22. </bean>

转-Java Decompiler 反编译器Eclipse插件

之前向大家推荐过一款Java反编译工具Java Decompiler, 目前该工具有对其进行较大的更新,所以也再次推荐给大家。

官网下载网址:http://java.decompiler.free.fr/
Eclipse 插件更新Url http://java.decompiler.free.fr/jd-eclipse/update

目前该插件只支持Windows x86平台。 支持的Eclipse的版本有3.2, 3.3和3.4

使用方法如下:

 

To install "JD-Eclipse" on your IDE:

  1. open window "Help > Software Updates > Find and Install",
  2. create a new remote site,
  3. name it,
  4. use this URL : "http://java.decompiler.free.fr/jd-eclipse/update",
  5. and finish the installation process.

To switch back to JadClipse:

  1. open the window "Window > Preferences > General > Editors > File Associations",
  2. and select JadClipse as default editor for the ".class" files.

Spring Hibernate 集成产生的错误

环境:Spring2.5  Hibernate3.2

在使用Spring的AOP编程时,会用到这几个lib:
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar

Hibernate使用如果lib:
asm.jar
asm-attrs.jar

其中asm-2.2.2.jar与asm.jar存在类上的冲突!!!
使用其中之一或两者都使用,可能会出现如下错误:
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。

解决办法是:
1.去掉类路径上的关于Hibernate的3个lib
asm.jar
asm-attrs.jar
cglib-2.1.3.jar

2.加入Spring中的以下4个lib
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
cglib-nodep-2.1_3.jar

转-Log4J 最佳实践之全能配置文件

下面给出得Log4J配置文件实现了输出到控制台,文件,回滚文件,发送日志邮件,输出到数据库日志表,自定义标签等全套功能。
log4j.rootLogger=DEBUG,CONSOLE,A1,im
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE

log4j.addivity.org.apache=true

###################
# Console Appender
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n

#####################
# File Appender
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n
# Use this layout for LogFactor 5 analysis

########################
# Rolling File
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n

####################
# Socket Appender
####################
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

########################
# Log Factor 5 Appender
########################
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

########################
# SMTP Appender
#######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@hollycrm.com
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@hollycrm.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n

########################
# JDBC Appender
#######################
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=Insert INTO LOG4J (Message) VALUES (‘[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n’)

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

###################
#自定义Appender
###################
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net

log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n

Flex 框架比較

比較判断基準
1,容易理解度
 2,导入难度
 3,代码编写量
4,类库的易用度
5,测试的难易度
6,文档的丰富度
7,与服务器的亲和度
8,已存在程序的改造难易度
9,维护的难易度
10,知名度
11,适用项目规模(假定 1 个画面约30个项目)

flex比較表

項目名                     Cairngorm                  PureMVC          Mate                   YUI-Framework
容易理解度                 ★★★★                      ★★★★            ★★                    ★★★★
导入难度                    ★★                          ★★                    ★★                    ★★★
代码编写量                                                                    ★★★★             ★★
类库的易用度              ★★                           ★★                    ★★                  ★★★
测试的难易度                                             ★★                    ★★★                 ★★
文档的丰富度             ★★★★                   ★★★★             ★★                  ★★
与服务器的亲和度       ★★★★                    ★★★★             ★★                  ★★
已存程序改造难易度                                                        ★★★                 ★★★
维护的难易度              ★★                           ★★                    ★★                    ★★
知名度                         ★★                                                  ★★★                ?
适用项目规模           画面数<30              画面数<100                           ?

spring 2.5 中文参考手册

来源:http://www.javaeye.com/news/2765

声明
Spring中文参考手册得到Spring Framework开发团队的直接授权和大力的支持,其目的是在中文世界推广优秀的开源技术。本次翻译活动由满江红开放技术研究组织(http://www.redsaga.com )和Spring中文论坛(http://spring.jactiongroup.net ) 共同发起、组织。我们在此郑重宣布,本次翻译遵循原Spring Framework的授权协议,即Apache 2.0协议。在完整保留全部文本(包括本版权页),并且不违反Apache 2.0协议的前提下,允许和鼓励任何人进行全文转载及推广,所有参与人员放弃除署名权外的一切权利。

致谢
如此庞大的项目不是一两个组织可以独立完成的,就像Spring本身一样,涵盖了Java技术的方方面面。因为有了大家的关心和支持才使此次项目能够顺利 完成。有理由相信,中文开源世界必将在不久的将来展现出更广阔的发展空间,希望大家都能为推动中国软件发展奉献出自己的一份力量。

项目主页:
http://wiki.redsaga.com/confluence/display/Spring2/Spring2.5

在线版本:
HTML / HTML Single

下载地址:
PDF(593页,4.41MB) / CHM(2.08MB)

本地下载:点击下载PDF文件

本地下载:点击下载CHM文件

勘误表:
http://wiki.redsaga.com/confluence/pages/viewpage.action?pageId=3171

myeclipse 7.1 keygen

1、建立java Project,任意取个名字就行。

2、建立一个名字为MyEclipseGen的类文件,内容见附件。

3、运行该代码,在控制台中会出现:

please input register name:
×××××(你的name)

即生成序列号:

4、进入myeclipse,输入Subscriber和Subscription code即可。

代码如下:

 

Java代码
  1. import java.io.*;  
  2.   
  3. public class MyEclipseGen {  
  4. private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";  
  5. public String getSerial(String userId, String licenseNum) {  
  6. java.util.Calendar cal = java.util.Calendar.getInstance();  
  7. cal.add(13);  
  8. cal.add(6, -1);  
  9. java.text.NumberFormat nf = new java.text.DecimalFormat("000");  
  10. licenseNum = nf.format(Integer.valueOf(licenseNum));  
  11. String verTime = new StringBuilder("-").append(new java.text.  
  12. SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").  
  13. toString();  
  14. String type = "YE3MP-";  
  15. String need = new StringBuilder(userId.substring(01)).append(type).  
  16. append("300").append(licenseNum).append(verTime).toString();  
  17. String dx = new StringBuilder(need).append(LL).append(userId).toString();  
  18. int suf = this.decode(dx);  
  19. String code = new StringBuilder(need).append(String.valueOf(suf)).  
  20. toString();  
  21. return this.change(code);  
  22. }  
  23.   
  24. private int decode(String s) {  
  25. int i;  
  26. char[] ac;  
  27. int j;  
  28. int k;  
  29. i = 0;  
  30. ac = s.toCharArray();  
  31. j = 0;  
  32. k = ac.length;  
  33. while (j < k) {  
  34. i = (31 * i) + ac[j];  
  35. j++;  
  36. }  
  37. return Math.abs(i);  
  38. }  
  39.   
  40. private String change(String s) {  
  41. byte[] abyte0;  
  42. char[] ac;  
  43. int i;  
  44. int k;  
  45. int j;  
  46. abyte0 = s.getBytes();  
  47. ac = new char[s.length()];  
  48. i = 0;  
  49. k = abyte0.length;  
  50. while (i < k) {  
  51. j = abyte0[i];  
  52. if ((j >= 48) && (j <= 57)) {  
  53. j = (((j - 48) + 5) % 10) + 48;  
  54. else if ((j >= 65) && (j <= 90)) {  
  55. j = (((j - 65) + 13) % 26) + 65;  
  56. else if ((j >= 97) && (j <= 122)) {  
  57. j = (((j - 97) + 13) % 26) + 97;  
  58. }  
  59. ac[i] = (char) j;  
  60. i++;  
  61. }  
  62. return String.valueOf(ac);  
  63. }  
  64.   
  65. public MyEclipseGen() {  
  66. super();  
  67. }  
  68.   
  69. public static void main(String[] args) {  
  70. try {  
  71. System.out.println("please input register name:");  
  72. BufferedReader reader = new BufferedReader(new InputStreamReader(  
  73. System.in));  
  74. String userId = null;  
  75. userId = reader.readLine();  
  76. MyEclipseGen myeclipsegen = new MyEclipseGen();  
  77. String res = myeclipsegen.getSerial(userId, "20");  
  78. System.out.println("Serial:" + res);  
  79. reader.readLine();  
  80. catch (IOException ex) {  
  81. }  
  82. }  
  83. }