[Apache Camel 2.8.0, JAXB, Jboss 6]
Przykład zaczytanie pliku XML do obiektu JAVA, z walidacją względem pliku XSD.
Wymagane dependency:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jaxb</artifactId>
<version>${camel-version}</version>
</dependency>
//W serwisie dodajemy metodę do uruchomienia pobierania danych z XML:
public void getBookXML() {
log.info("Import z XML BEGIN");
BookXML bookXML = null;
Exchange exchFile;
List<BookDTO> books = new ArrayList<BookDTO>();
ProducerTemplate producer = camelContext.createProducerTemplate();
ConsumerTemplate consumer = camelContext.createConsumerTemplate();
try {
String endpoint = MyUtils.getParameterOrNull("endpoint.file");
log.info("endpoint: "+endpoint);
exchFile = consumer.receive(endpoint, 2000L);
if (exchFile != null && exchFile.getIn() != null
&& exchFile.getIn().getBody() != null) {
log.info("Pobrano z: "
+ exchFile.getIn().getBody().getClass().toString());
log.info("ret: " + exchFile.getIn().getBody().toString());
Object validRet = producer.sendBody("direct:unmarshal",
ExchangePattern.InOut, exchFile.getIn().getBody());
if(validRet instanceof Boolean
&& (Boolean)validRet){
bookXML = (BookXML) producer.sendBody("direct:readXmlBook",
ExchangePattern.InOut, exchFile.getIn().getBody());
}else{
throw new MyException("B\u0142\u0105d walidacji XML");
}
books = prepareHashMapBooks(bookXML);
consumer.doneUoW(exchFile);
} else {
log.info("Brak pliku do importu");
}
log.info("Pobrano: "+books.size());
} catch (Exception e) {
e.printStackTrace();
}
log.info("Import z XML END");
}
//BUILDER TRAS APACHE CAMEL
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.dataformat.JaxbDataFormat;
public class MyRouteBuilderFile extends RouteBuilder{
@Override
public void configure() throws Exception {
JaxbDataFormat dataFormat = new JaxbDataFormat(false);
dataFormat.setContextPath("com.bloger.programmingmt.example");
//przeksztalcenie na z XML na DTO
from("direct:unmarshalFile")
.unmarshal(dataFormat)
.to("log: IN ==>");
//Parsowania XML na podstawie XSD
from("direct:unmarshal")
.convertBodyTo(org.w3c.dom.Document.class)
.bean(ParserXMLFileProcessor .class, "process")
.end();
}
}
//PROCESOR WALIDUJACY STRUKTURE PLIKU XML NA PODSTAWIE XSD
public class ParserXMLFileProcessor implements Processor {
private static final Logger log = Logger.getLogger(ParserXMLFileProcessor.class);
@Autowired
private CamelContext camelContext;
@Override
public void process(Exchange exchange) throws Exception {
Exchange exchFile = null;
try {
SchemaFactory factory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
ConsumerTemplate consumer = camelContext.createConsumerTemplate();
//Wskazanie pliku XSD do walidacji
String schemaFileEndpoint = Utils.getParameterOrNull("endpoint.book.file.validator");
log.info("schemaFileEndpoint: "+schemaFileEndpoint);
try {
if(schemaFileEndpoint!=null
&& schemaFileEndpoint.length()>0){
exchFile = consumer.receive(schemaFileEndpoint, 2000L);
}
} catch (Exception e) {
e.printStackTrace();
throw new MyException("Wystąpił wyjątek podczas pobierania pliku XSD dla walidacji: "+e.getMessage());
}
if (exchFile != null && exchFile.getIn() != null
&& exchFile.getIn().getBody() != null) {
log.info("Pobrano z: "
+ exchFile.getIn().getBody().getClass().toString());
log.info("ret: " + exchFile.getIn().getBody().toString());
Schema schema = factory.newSchema((File)((GenericFile)exchFile.getIn().getBody()).getFile());
Validator validator = schema.newValidator();
validator.validate(new DOMSource((Document)exchange.getIn().getBody()));
System.out.println("...passed...");
consumer.doneUoW(exchFile);
} else {
log.info("Brak pliku do walidacji struktury");
}
exchange.getIn().setBody(Boolean.TRUE);
exchange.getOut().setBody(Boolean.TRUE);
} catch (Exception e) {
e.printStackTrace();
exchange.getIn().setBody(Boolean.FALSE);
exchange.getOut().setBody(Boolean.FALSE);
}
}
public void setCamelContext(
CamelContext camelContext) {
this.camelContext = camelContext;
}
}
poniedziałek, 22 lipca 2013
Hibernate - HSQL/SQL - prosty przykład
Zapytania HSQL można definiować w obiektach których te zapytania dotyczą. Poniżej przykłąd zapytań dla klasy Book. Zapytania są zdefiniowane z użyciem adnotacji @NamedQueries i @NamedQuery
1) Dafinicja z użyciem adnotacji @NamedQueries i @NamedQuery
@Entity(name = "Book")
@NamedQueries( {
@NamedQuery(name = "Book.getElements", query = "SELECT b FROM Book b"),
@NamedQuery(name = "Book.get", query = "SELECT b FROM Book WHERE b.id = :id")})
@Table(name = "BOOK")
public class Book extends Base {
...
}
Przykłady użycia HSQL:
Query q = session.getNamedQuery("Book.getElements");
q = sessionz.createQuery("");
q.setParameter(0, "param");
q.list();
q.executeUpdate();
q.uniqueResult();
q.setMaxResults(max)
2)) Wywołanie zapytań realizuje się wewnątrz DAO. Przykładowe wywołania poniżej:
public class BookDAOImpl implements BookDAO {
private HibernateTemplate hibernateTemplate;
public void setSessionFactory(SessionFactory sessionFactory) {
hibernateTemplate = new HibernateTemplate(sessionFactory);
}
...
//Zapytanie definiowane bezpośrednio w DAO
public Book findByName(String name) {
@SuppressWarnings("unchecked")
List<Book> result = (List<Book>) hibernateTemplate.findByNamedParam(
"SELECT t FROM Book t where name= :name"
, "name",
name);
if (!result.isEmpty()) {
return result.get(0);
}
return null;
}
//aktualizacja obiektu z użyciem zapytania zdefiniopwanego w klasie Book
public void updateBookName(final Book book) {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query updateQuery = session.getNamedQuery("Book.updateName");
query.setParameter("name", book.getName());
Integer result = query.executeUpdate();
return result;
}
});
}
}
1) Dafinicja z użyciem adnotacji @NamedQueries i @NamedQuery
@Entity(name = "Book")
@NamedQueries( {
@NamedQuery(name = "Book.getElements", query = "SELECT b FROM Book b"),
@NamedQuery(name = "Book.get", query = "SELECT b FROM Book WHERE b.id = :id")})
@Table(name = "BOOK")
public class Book extends Base {
...
}
Przykłady użycia HSQL:
Query q = session.getNamedQuery("Book.getElements");
q = sessionz.createQuery("");
q.setParameter(0, "param");
q.list();
q.executeUpdate();
q.uniqueResult();
q.setMaxResults(max)
2)) Wywołanie zapytań realizuje się wewnątrz DAO. Przykładowe wywołania poniżej:
public class BookDAOImpl implements BookDAO {
private HibernateTemplate hibernateTemplate;
public void setSessionFactory(SessionFactory sessionFactory) {
hibernateTemplate = new HibernateTemplate(sessionFactory);
}
...
//Zapytanie definiowane bezpośrednio w DAO
public Book findByName(String name) {
@SuppressWarnings("unchecked")
List<Book> result = (List<Book>) hibernateTemplate.findByNamedParam(
"SELECT t FROM Book t where name= :name"
, "name",
name);
if (!result.isEmpty()) {
return result.get(0);
}
return null;
}
//aktualizacja obiektu z użyciem zapytania zdefiniopwanego w klasie Book
public void updateBookName(final Book book) {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query updateQuery = session.getNamedQuery("Book.updateName");
query.setParameter("name", book.getName());
Integer result = query.executeUpdate();
return result;
}
});
}
}
JAVA - serwis RMI
Przykładowe udostępnienie serwisu RMI. Należy pamiętać że interfejs musi rozszerzać 'Remote' a metody serwisu muszą rzucać wyjątek 'RemoteException'.
1) Interfejs:
public interface IntegrationServiceRMI extends Remote {
void saveUpdateBook(Book book) throws RemoteException;
}
2) Serwis:
public class IntegrationServiceRMIImpl implements IntegrationServiceRMI {
@Override
public void saveUpdateBook(Book book) throws Exception {
....
}
}
3) Klient serwisu RMI:
<bean id="integrationService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl">
<value>${rmi.host}</value>
</property>
<property name="serviceInterface" value="com.blogger.programmingmt.interface. IntegrationServiceRMI " />
<property name="lookupStubOnStartup" value="false"/>
</bean>
4) Testowanie połączenia do serwisu RMI:
Registry registry;
IntegrationServiceBO stub = null;
try {
registry = LocateRegistry.getRegistry("localhost", 1099);
stub = ( IntegrationServiceRMI ) registry.lookup("integrationService");
} catch (RemoteException e1) {
e1.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
try {
stub.saveUpdateBook(book);
} catch (RemoteException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
1) Interfejs:
public interface IntegrationServiceRMI extends Remote {
void saveUpdateBook(Book book) throws RemoteException;
}
2) Serwis:
public class IntegrationServiceRMIImpl implements IntegrationServiceRMI {
@Override
public void saveUpdateBook(Book book) throws Exception {
....
}
}
3) Klient serwisu RMI:
<bean id="integrationService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl">
<value>${rmi.host}</value>
</property>
<property name="serviceInterface" value="com.blogger.programmingmt.interface. IntegrationServiceRMI " />
<property name="lookupStubOnStartup" value="false"/>
</bean>
4) Testowanie połączenia do serwisu RMI:
Registry registry;
IntegrationServiceBO stub = null;
try {
registry = LocateRegistry.getRegistry("localhost", 1099);
stub = ( IntegrationServiceRMI ) registry.lookup("integrationService");
} catch (RemoteException e1) {
e1.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
try {
stub.saveUpdateBook(book);
} catch (RemoteException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Subskrybuj:
Posty (Atom)