在IDE上的设置
首先下载的IntelliJ IDEA的x(社区版)因为目前它是最好的Scala的IDE然后选择File |设置|插件选择可用的选项卡来安装Scala插件
创建Maven项目
在IntelliJ IDEA中选择文件|新建项目然后选择Maven的模块创建一个Maven项目然后修改如下所示的pomxml添加所有你需要的设置建立Scala的汇编语言
<project xmlnsxmlns=xmlns:xsi=instance
xsi:schemaLocation=v__xsd>
<modelVersion></modelVersion>
<groupId>comfoo</groupId>
<artifactId>myapp</artifactId>
<packaging>war</packaging>
<version>SNAPSHOT</version>
<name>myapp Java EE Webapp</name>
<url>;/url>
<properties>
<springversion>RELEASE</springversion>
</properties>
<repositories>
<repository>
<id></id>
<name>Repository hosting the jee artifacts</name>
<url>;/url>
</repository>
<repository>
<id></id>
<name>Scalatools Maven Repository</name>
<url>;/url>
</repository>
<repository>
<id>wptrelease</id>
<url>repo/releases</url>
</repository>
<repository>
<id>wptsnapshot</id>
<url>repo/snapshots</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id></id>
<name>Scalatools Maven Repository</name>
<url>;/url>
</pluginRepository>
</pluginRepositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>orgspringframework</groupId>
<artifactId>springcontext</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>orgspringframework</groupId>
<artifactId>springcore</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>orgspringframework</groupId>
<artifactId>springweb</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>orgspringframework</groupId>
<artifactId>springorm</artifactId>
<version>${springversion}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>comhdatabase</groupId>
<artifactId>h</artifactId>
<version></version>
</dependency>
<dependency>
<groupId>orghibernate</groupId>
<artifactId>hibernateentitymanager</artifactId>
<version>GA</version>
</dependency>
<dependency>
<groupId>orgspringframework</groupId>
<artifactId>springorm</artifactId>
</dependency>
<dependency>
<groupId>dev</groupId>
<artifactId>wptcore</artifactId>
<version>SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>dev</groupId>
<artifactId>wptruntimespring</artifactId>
<version>SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaeewebapi</artifactId>
<version></version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version></version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>orgscalalang</groupId>
<artifactId>scalalibrary</artifactId>
<version>RC</version>
</dependency>
<dependency>
<groupId>orgapachewicket</groupId>
<artifactId>wicket</artifactId>
<version></version>
</dependency>
<dependency>
<groupId>orgslfj</groupId>
<artifactId>slfjlogj</artifactId>
<version></version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>orgapachemavenplugins</groupId>
<artifactId>mavencompilerplugin</artifactId>
<version></version>
</plugin>
<plugin>
<groupId>orgscalatools</groupId>
<artifactId>mavenscalaplugin</artifactId>
<version></version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>orgapachemavenplugins</groupId>
<artifactId>mavencompilerplugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<source></source>
<target></target>
</configuration>
</plugin>
<plugin>
<groupId>orgapachemavenplugins</groupId>
<artifactId>mavenwarplugin</artifactId>
<version>beta</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>orgscalatools</groupId>
<artifactId>mavenscalaplugin</artifactId>
<executions>
<execution>
<id>scalacompilefirst</id>
<phase>processresources</phase>
<goals>
<goal>addsource</goal>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scalatestcompile</id>
<phase>processtestresources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>myapp</finalName>
</build>
</project>
webxml中设置
接下来修改main/webapp/WEBINF/webxml从而确立了Wicket的过滤器打开Spring的JPA实体管理器和Spring监听器进行Spring的初始化
<?xml version= encoding=UTF?>
<webapp version=xmlns=xmlns:xsi=instance
xsi:schemaLocation=app__xsd>
<filter>
<filtername>f</filtername>
<filterclass>orgspringframeworkormjpasupportOpenEntityManagerInViewFilter</filterclass>
</filter>
<filter>
<filtername>f</filtername>
<filterclass>orgapachewicketprotocolhttpWicketFilter</filterclass>
<initparam>
<paramname>applicationClassName</paramname>
<paramvalue>comfoomyappMyApp</paramvalue>
</initparam>
</filter>
<filtermapping>
<filtername>f</filtername>
<urlpattern>/app/*</urlpattern>
</filtermapping>
<filtermapping>
<filtername>f</filtername>
<urlpattern>/*</urlpattern>
</filtermapping>
<contextparam>
<paramname>contextConfigLocation</paramname>
<paramvalue>classpath:/beansxml</paramvalue>
</contextparam>
<listener>
<listenerclass>orgsprntextContextLoaderListener</listenerclass>
</listener>
</webapp>
设置Spring bean访问和调用的数据库
要定义这些Spring bean创建main/resources的beansxml以及一下的内容
<?xml version= encoding=UTF ?>
<beansxmlnsbeansxmlns=
xmlns:xsi=instance
xmlns:context=
xmlns:tx=
xsi:schemaLocation=
beansxsd
contextxsd
txxsd>
<context:componentscan basepackage=comfoomyapp/>
<bean id=emfclass=orgspringframeworkormjpaLocalContainerEntityManagerFactoryBean>
<property name=persistenceXmlLocationvalue=classpath:/METAINF/mypersistencexml/>
</bean>
<bean id=transactionManagerclass=orgspringframeworkormjpaJpaTransactionManager>
<property name=entityManagerFactory ref=emf/>
</bean>
<tx:annotationdriven />
</beans>
读取数据库配置中persistencexml文件在这里您将获得一个主目录中名为MyApp的H数据库因此创建main/resources/METAINF文件的内容如下
<persistencexmlnspersistencexmlns=
xmlns:xsi=instance
xsi:schemaLocation=__xsd
version=>
<persistenceunit name=myapp transactiontype=RESOURCE_LOCAL>
<provider>orghibernateejbHibernatePersistence</provider>
<properties>
<propertynamepropertyname=nnectiondriver_classvalue=orghDriver/>
<property name=nnectionurlvalue=jdbc:h:tcp://localhost/~/myapp/>
<propertynamepropertyname=nnectionusername value=sa/>
<propertynamepropertyname=nnectionpassword value=/>
<property name=hibernatedialectvalue=orghibernatedialectHDialect/>
<property name=hibernatehbmddlautovalue=create/>
</properties>
</persistenceunit>
/persistence>
创建Wicket的页面
在这里您将创建一个Wicket页面显示从数据库加载一些内容因此创建主/Scala文件夹右键单击它并选择新建|Scala类命名为我的页面类和投入comfoomyapp包中如下所示
package comfoomyapp
import orgapacl_
import basicLabel
import list{ListItem ListView}
importorgapachewicketspringinjectionannotSpringBean
import orgapachewicketmodelCompoundPropertyModel
class MyPage extends WebPage {
@SpringBean
var ps: ProductService = _
val productListView = newListView[Product](productListView psgetAll) {
def populateItem(item: ListItem[Product]) = {
itemsetModel(newCompoundPropertyModel[Product](itemgetDefaultModelObject))
itemadd(new Label(name))
itemadd(new Label(price))
}
}
add(productListView)
}
请注意在创建ProductService对象加载的文件之后使用此外请注意该字段被分配到一个下划线(_)Scala编译为不可初始化的而是留在默认状态在你将覆盖作为编译之前执行Spring bean的页面构造现在创建在src/main/resources/com/foo/myapp的的l文件
<!DOCTYPE HTML PUBLIC //WC//DTD HTML Transitional//EN>
<html>
<table border=>
<tr wicket:id=productListView>
<td wicket:id=name></td>
<td wicket:id=price></td>
</tr>
</table>
</html>
创建ProductService
右键单击在in the src/main/scala文件夹中的comfoomyapp包并选择New | Scala的类然后选择创建ProductService
package comfoomyapp
import javautilList
trait ProductService {
def getAll: List[Product]
}
这是接口对创造一个DefaultProductService的Scala在同一个包内进行执行操作
package comfoomyapp
import javaxpersistence{PersistenceContext EntityManager}
import orgspringframeworkstereotype{Service}
importorgspringframeworktransactionannotationTransactional
importorgspringframeworkbeansfactoryannotationAutowired
@Service
@Transactional
class DefaultProductService extends ProductService {
@Autowired
var products: Products = _
def getAll = productsgetAll
}
请注意把它使用类型文件命名为DAO
创建文件的DAO
要创建的DAO创建一个名为在同一文件夹
package comfoomyapp
import javautilList
trait Products {
def getAll: List[Product]
}
然后创建在同一文件夹中的执行Scala的DefaultProducts文件
package comfoomyapp
import javaxpersistence{PersistenceContext EntityManager}
import orgspringframeworkstereotypeRepository
import javautilList
@Repository
class DefaultProducts extends Products {
@PersistenceContext
var em: EntityManager = _
def getAll = {
emcreateQuery(select p from Product p)getResultListasInstanceOf[List[Product]]
}
}
创建entity程序
创建entity程序并将其映射到数据库
package comfoomyapp
import javaxpersistence{GeneratedValue Id Entity}
@Entity
class Product {
@Id
@GeneratedValue
var id: Long = _
var name: String = _
var price: Double = _
}
创建Wicket的应用程序
最后创建在同一个MyApp的Scala程序
package comfoomyapp
import orgapachewicketprotocolhttpWebApplication
devwicketpagetestMockableSpringBeanInjector
class MyApp extends WebApplication {
def getHomePage = classOf[MyPage]
override def init = {
MockableSpringBeanInjectorinstallInjector(this)
}
}
在这里您指定为首页我的目录植入Spring Bean中
运行应用程序
随着IntelliJ IDEA的版本不断改进您将嵌入到应用服务器运行您的应用程序这非常容易在刚刚创建的测试comfoomyapp的ManualTest在刚刚创建的测试comfoomyapp包一类ManualTest/scala文件(不是main/scala文件)以下内容是
package comfoomyapp
devwicketpagetest{WebAppJettyConfiguration WicketAppJettyLauncher}
object ManualTest {
def main(args: Array[String]) {
val l = new WicketAppJettyLauncher
lstartAppInJetty(new WebAppJettyConfiguration)
}
}
要运行的应用程序首先需要运行数据库服务器上的H程序所以在下载和解压然后变成h/bin和运行hbat(或在Linux上hsh)ManualTest是在IDEA的编辑器上在IDEA选择运行DEA它将运行ManualTestJetty的运行您的应用程序
为了测试它请尝试通过在浏览//localhost:/app
不知道各位感觉如何感谢各位支持!谢谢!
原文名Getting started with Scala Spring Hibernate & Wicket