Я хочу узнать, как использовать Guice Persist (Guice 3.0) с Wicket 1.5.
Я не смог найти ни одного примера типа «Привет, мир», объясняющего, как это сделать, если вы можете связать / предоставить такой пример, который был бы великолепен и с радостью принят в качестве ответа.
А пока я сам попытаюсь создать пример типа «Привет, мир», разместив здесь код по мере продвижения. Помощь в правильной настройке моего кода также будет принята в качестве ответа.
Я настроил простой проект калитки, очень похожий на «привет мир» пример guice из примеров Wicket, который использует guice для внедрения зависимостей. Теперь я хочу расширить этот проект, чтобы также использовать JPA и Guice Persist, вместо «Hello World», я хочу получить пользователя из базы данных и отобразить его имя пользователя. Я пытаюсь добиться этого, используя инструкции из вики Guice о Guice persist .
ОБНОВЛЕНИЕ: Итак, вроде как все получилось. В WebApplication.init()
я вставил ServetModule, как этот getComponentInstantiationListeners().add(new GuiceComponentInjector(this, new MyServletModule()));
, и также добавил GuiceFilter вверху файла web.xml, перед фильтром калиток.
Теперь, когда я запускаю приложение, все работает, но я получаю это предупреждение об использовании устаревших методов. Подробнее рассмотрим это.
ВНИМАНИЕ: Вы пытаетесь использовать устаревший API (в частности,
попытка @Inject ServletContext внутри нетерпеливо созданного
синглтон. Хотя мы допускаем это для обратной совместимости, имейте в виду
что это может иметь неожиданное поведение, если у вас есть более одного
инжектор (с ServletModule) работает в той же JVM. Пожалуйста, проконсультируйтесь
Guice документация на
http://code.google.com/p/google-guice/wiki/Servlets для более
информация.
Дерево каталогов
.
├── pom.xml
└── src
└── main
├── java
│ └── se
│ └── lil
│ ├── HomePage.html
│ ├── HomePage.java
│ ├── MyServletModule.java
│ ├── WicketApplication.java
│ ├── domain
│ │ └── User.java
│ └── service
│ ├── IService.java
│ └── JpaService.java
├── resources
│ ├── META-INF
│ │ └── persistence.xml
│ └── log4j.properties
└── webapp
└── WEB-INF
└── web.xml
WicketApplication.java
public class WicketApplication extends WebApplication {
@Override
protected void init() {
super.init();
getComponentInstantiationListeners().add(new GuiceComponentInjector(this,
new MyServletModule()));
}
@Override
public Class<? extends Page> getHomePage() {
return se.lil.HomePage.class;
}
}
HomePage.java
public class HomePage extends WebPage {
private static final long serialVersionUID = -918138816287955837L;
@Inject
private IService service;
private IModel<User> model = new LoadableDetachableModel<User>() {
private static final long serialVersionUID = 1913317225318224531L;
@Override
protected User load() {
return service.getUser();
}
};
public HomePage() {
setDefaultModel(new CompoundPropertyModel<User>(model));
add(new Label("name"));
}
}
homepage.html
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org">
<head>
<title>Wicket Examples - guice</title>
</head>
<body>
<hr />
Value: <b wicket:id="name">name goes here</b> <br />
<hr />
</body>
</html>
MyServletModule.java
public class MyServletModule extends ServletModule {
protected void configureServlets() {
install(new JpaPersistModule("manager1"));
filter("/*").through(PersistFilter.class);
}
}
IService.java
@ImplementedBy(JpaService.class)
public interface IService {
public User getUser();
}
JpaService.java
public class JpaService implements IService {
@Inject
private EntityManager em;
@Override
@Transactional
public User getUser() {
Query q = em.createQuery("FROM User");
q.setMaxResults(1);
User u = (User) q.getSingleResult();
return u;
}
}
User.java
@Entity
@Table (name = "users")
public class User {
private Long id;
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
@SuppressWarnings("unused")
private void setId(Long id) {
this.id = id;
}
@Basic
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>wicketwithguice</display-name>
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>wicket.wicketwithguice</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>se.lil.WicketApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>wicket.wicketwithguice</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>se.lil.domain.User</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
<property name="hibernate.show_sql" value="true"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/test"/>
<property name="javax.persistence.jdbc.user" value="test"/>
<property name="javax.persistence.jdbc.password" value="1234"/>
</properties>
</persistence-unit>
</persistence>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>se.lil</groupId>
<artifactId>wicketwithquice</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<!-- TODO project name -->
<name>quickstart</name>
<description></description>
<!-- TODO <organization> <name>company name</name> <url>company url</url> </organization> -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hibernate-core.version>3.6.4.Final</hibernate-core.version>
<mysql-connector-java.version>5.1.16</mysql-connector-java.version>
<slf4j.version>1.6.1</slf4j.version>
<log4j.version>1.6.1</log4j.version>
<guice.version>3.0</guice.version>
<wicket.version>1.5.2</wicket.version>
</properties>
<dependencies>
<!--GUICE DEPENDENCIES -->
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-persist</artifactId>
<version>${guice.version}</version>
</dependency>
<!-- HIBERNATE DEPENDENCIES -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate-core.version}</version>
</dependency>
<!-- MYSQL DEPENDENCIES -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
<!-- WICKET DEPENDENCIES -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-guice</artifactId>
<version>${wicket.version}</version>
</dependency>
<!-- LOGGING DEPENDENCIES - LOG4J -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<optimize>true</optimize>
<debug>true</debug>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<downloadSources>true</downloadSources>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>Apache Nexus</id>
<url>https://repository.apache.org/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>